从对象数组中选择一些字段并展平结果

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

我正在使用 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 库来做到这一点?

java jsonpath jayway
1个回答
0
投票

恐怕没有直接的方法可以达到预期的结果。您可以通过查询长度并自行构建列表来创建解决方法:

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);
© www.soinside.com 2019 - 2024. All rights reserved.