我需要用一系列不均一的“项目”来解析json,即每个项目可能具有不同的键/结构,但是它们共享一个提供该项目类型的通用键(此处称为“ 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改为返回地图列表。)
替代解决方案可能是使用JsonPath“查询路径”(我的术语),例如,仅返回“ items”。 a = 2作为映射列表-或与每种项目类型的嵌套结构相匹配的类型化对象的列表(可能共享包含类型键作为字段的超级接口)。这可能吗?
$.items
不起作用,因为它不是字符串列表。它是JSON对象的数组。
我不确定您要寻找的是什么,但是有几种方法可以解决它:
$.items.[*].a
将返回a
的所有值。如果所有内容都为a
,则可能没问题:
[1, 2]
如果要获得具有a
特定值的内容,可以使用以下语法:
$.items[?(@.a == 2)]
此返回:
[
{
"a": 2,
"b": {
"c": 2
}
}
]
有关其他示例,请参见JSONPath Github页面。