如何用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
相关产品推荐
相关产品推荐

