gpt4 book ai didi

java - 使用 JsonPath 提取非同质列表作为类型化对象

转载 作者:行者123 更新时间:2023-12-01 18:01:07 25 4
gpt4 key购买 nike

我需要使用一系列非同质“项目”来解析 json,即每个项目可能具有不同的键/结构,但它们共享一个公共(public)键(此处称为“a”)来给出项目的类型。

{
"items":[
{"a":1, "d":2},
{"a":2, "b":{"c":2}}
]
}

我认为执行此操作的一种方法可能是使用类似以下内容的路径“$.items”从列表中挑选每个“item”的 json 字符串,

List<String> jsonStrings = JsonPath.parse(json).read("$.items");

第一个字符串为 '{"a":1, "d":2}',第二个字符串为 '{"a":2, "b":{"c":2}} '。这样我就可以继续使用 JsonPath 本身询问内部位的问题。这可能吗? (上面的代码失败,因为 JsonPath 返回一个 map 列表。)

另一种解决方案可能是使用 JsonPath“查询路径”(我的术语)仅返回“项目”,例如a = 2 作为映射列表 - 或与每个项目类型的嵌套结构匹配的类型对象列表(可能共享包含类型键作为字段的 super 接口(interface))。这可能吗?

最佳答案

$.items 不起作用,因为它不是字符串列表。它是一个 JSON 对象数组。

我不确定您到底在寻找什么,但有几种方法可以处理它:

$.items.[*].a

将返回a的所有值。如果所有东西都有一个a,这可能没问题:

[1, 2]

如果您想获取 a 的特定值,可以使用以下语法:

$.items[?(@.a == 2)]

这将返回:

[
{
"a": 2,
"b": {
"c": 2
}
}
]

请参阅JSONPath Github其他示例页面。

关于java - 使用 JsonPath 提取非同质列表作为类型化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60625716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com