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

如何用Jayway JsonPath 2.9.0提取指定字段并展平为字符串数组?

解决方案:使用Jayway JsonPath 2.9.0实现指定字段的展平数组

Jayway JsonPath 2.9.0本身没有内置表达式直接返回展平后的一维数组,但可以通过先获取嵌套数组,再用Java代码展平的方式实现需求,具体步骤如下:

1. 正确的JsonPath表达式

使用你之前尝试过的表达式$.data[*]['firstField','secondField','thirdField'],它会返回一个二维列表(List<List<String>>),结构为[["AAA","ZZZ","111"], ["BBB","XXX","222"]],这是Jayway对多字段选择的标准返回格式。

2. Java代码展平嵌套数组

通过Java Stream API将二维列表展平为一维数组,示例代码如下:

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

public class JsonPathExample {
    public static void main(String[] args) {
        String json = "{\"data\":[{\"firstField\":\"AAA\",\"secondField\":\"ZZZ\",\"thirdField\":\"111\",\"fourthField\":\"ignore1\"},{\"firstField\":\"BBB\",\"secondField\":\"XXX\",\"thirdField\":\"222\",\"fourthField\":\"ignore2\"}]}";
        
        // 获取嵌套数组
        List<List<String>> nestedValues = JsonPath.read(json, "$.data[*]['firstField','secondField','thirdField']");
        
        // 展平为一维数组
        List<String> flatValues = nestedValues.stream()
                .flatMap(List::stream)
                .collect(Collectors.toList());
        
        // 输出结果
        System.out.println(flatValues); // 输出: [AAA, ZZZ, 111, BBB, XXX, 222]
    }
}

关于你尝试的其他表达式的说明

  • $.data[*].firstField,secondField,thirdField:这种语法属于部分在线JsonPath工具的扩展实现,Jayway JsonPath并不支持,因此会返回空结果。
  • $.data[*][*]:会返回所有字段的值(包括fourthField),不符合你的过滤需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:55:02