我正在使用 Jayway JsonPath(版本 2.9.0)Java 库,并尝试从对象数组中选择一些字段并将它们展平为字符串数组。
输入:
{
"data": [
{
"firstField": "AAA",
"secondField": "ZZZ",
"thirdField": "111",
"fourthField": "ignore1"
},
{
"firstField": "BBB",
"secondField": "XXX",
"thirdField": "222",
"fourthField": "ignore2"
}
]
}
预期输出:
[
"AAA",
"ZZZ",
"111",
"BBB",
"XXX",
"222"
]
返回所有值的数组很简单(
$.data[*][*]
),但这不是我想要实现的。
我尝试了多种表达方式,但都不起作用。
例如
$.data[*]['firstField','secondField','thirdField']
- 返回数组的数组,但无法展平它。在末尾添加 [*]
返回空数组。
$.data[*].firstField,secondField,thirdField
- 这个在一些在线工具中工作并返回预期结果,但 Jayway 库返回空结果。
是否可以使用 Jayway JsonPath 库来做到这一点?
恐怕没有直接的方法可以达到预期的结果。您可以通过查询长度并自行构建列表来创建解决方法:
String json = "...";
DocumentContext context = JsonPath.parse(json);
int length = context.read("$..data.length()");
List<String> list = new ArrayList<>();
for (int i = 0; i < length; i++) {
list.add(context.read("$.data[" + i + "]['firstField']"));
list.add(context.read("$.data[" + i + "]['secondField']"));
list.add(context.read("$.data[" + i + "]['thirdField']"));
}
System.out.println(list);