如何合并项目数组?

问题描述 投票:0回答:1

我在 Java 中有一个 json 结构,其中包含不同类别下相似对象的重复列表,我想使用 JsonPath 进行查询:

{"root":
{"cars":[
{"make":"Ford", "colour":"white", "doors":4},
{"make":"Audi", "colour":"silver","doors":2}
],
"vans":[
{"make":"Ford", "colour":"blue", "weight":2}
]
}}

我想返回第三辆车的颜色,所以希望这样做:

$.root.[cars,vans][2].colour

但似乎 [cars,vans] 表达式返回一个数组数组,而不是所有车辆的单个联合/连接数组,并且索引运算符 [2] 分别应用于每个汽车和货车数组(什么都不返回),而不是它们的联合(应该返回货车)。

$.root.[cars,vans][0].colour 

返回第一辆汽车和第一辆货车,同时

$.root.[cars,vans][0].colour[0] 

返回第一辆车和第一辆货车每种颜色的第一个字母,

$.root.[cars,vans][1].colour 

仅返回第二辆车。

类似地,使用通配符会返回相同的数组数组:

$.root.*[0].colour

有没有办法合并 [cars,vans] 联合的结果,例如通过使用:

$.root.[[cars,vans]][2].colour

或者我是否需要编写自己的 Java 实现之一的改编代码?

jsonpath
1个回答
0
投票

在 JSONPath 中你无法得到你期望的结果,最好的 JSONPath 可以做的是

$..colour
返回一个像这样的数组
["white","silver","blue"]
然后你可以在你的程序中进一步计算数组的第三个元素。

或者您可以使用 JMESPATH 通过以下查询来解决此问题:

@.root.[*][][].colour | [2]
,它会准确返回
blue

或者您可以使用 jq 通过以下查询来解决此问题:

.root | flatten | .[2].colour
,它会准确返回
blue

© www.soinside.com 2019 - 2024. All rights reserved.