You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JsonPath合并数组?Java场景下的数组联合查询问题

使用JsonPath合并多数组并查询指定元素

问题核心

$.root.[cars,vans]返回的是嵌套数组结构([[cars元素], [vans元素]]),而非扁平化的单数组,因此直接使用索引[2]会分别作用于两个子数组,导致返回空值。

解决方案:利用flatten()函数扁平化数组

在Java常用的Jayway JsonPath实现中,可通过flatten()函数将嵌套数组转换为单个数组,之后就能直接通过索引访问合并后的元素:

正确的JsonPath表达式

$.root.[cars,vans].flatten()[2].colour

Java代码示例

import com.jayway.jsonpath.JsonPath;

public class JsonPathMergeExample {
    public static void main(String[] args) {
        String json = "{\"root\":{\"cars\":[{\"make\":\"Ford\", \"colour\":\"white\", \"doors\":4},{\"make\":\"Audi\", \"colour\":\"silver\",\"doors\":2}],\"vans\":[{\"make\":\"Ford\", \"colour\":\"blue\", \"weight\":2}]}}";
        
        String targetColour = JsonPath.read(json, "$.root.[cars,vans].flatten()[2].colour");
        System.out.println(targetColour); // 输出: blue
    }
}

备选方案:Java代码手动扁平化

若使用的JsonPath实现不支持flatten(),可先获取嵌套结果集合,再通过Java代码手动扁平化后取值:

import com.jayway.jsonpath.JsonPath;
import java.util.List;
import java.util.stream.Collectors;

public class JsonPathManualMerge {
    public static void main(String[] args) {
        String json = "{\"root\":{\"cars\":[{\"make\":\"Ford\", \"colour\":\"white\", \"doors\":4},{\"make\":\"Audi\", \"colour\":\"silver\",\"doors\":2}],\"vans\":[{\"make\":\"Ford\", \"colour\":\"blue\", \"weight\":2}]}}";
        
        // 获取所有颜色的嵌套列表
        List<List<String>> nestedColours = JsonPath.read(json, "$.root.[cars,vans][*].colour");
        // 扁平化处理
        List<String> allColours = nestedColours.stream()
                .flatMap(List::stream)
                .collect(Collectors.toList());
        // 获取合并后的第3个元素(索引为2)
        String targetColour = allColours.get(2);
        System.out.println(targetColour); // 输出: blue
    }
}

内容的提问来源于stack exchange,提问作者S Bullen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:52:34