-2

我有一个巨大的 JSON,但我只需要解析特定的字段。我知道这些字段的路径,所以我决定尝试 JPath,它可以工作,但我想一次解析所有字段。假设我有这样的 JSON:

{
  "data": [
    {
      "field1": 1,
      "field2": 1,
      ...
      "another_data": [ {
        "required_field1": "1",
        "required_field2": "2"
      }
      ],
      ...
    }
  ]
}

我只想获取具有这些路径的必填字段并将其映射到 Java POJO:

$.data[*].another_data[*].required_field1
$.data[*].another_data[*].required_field2

因此,作为最终结果,我想要一个 Java 对象列表,其中该对象包含required_field1required_field2

升级版:

  • 现在如何运作

我有一个 Java POJO,它是一个容器

class RequiredInfo {

private String field1;
private String field2;

//constructor, setters, etc

}

我使用 JPath 读取了 2 次 JSON 路径:

String json = "...";

Object document = Configuration.defaultConfiguration().jsonProvider().parse(json);

List<String> reqFields1 = JsonPath.read(document, "$.data[*].another_data[*].required_field1");
List<String> reqFields2 = JsonPath.read(document, "$.data[*].another_data[*].required_field2")

然后我将它映射到我的 POJO

  for (int i = 0; i < reqFields1.size(); i++) {
      res.add(new RequiredInfo(reqFields1.get(i), reqFields2.get(i)));
   }

有点我认为有更好的方法可以做到这一点

4

1 回答 1

1

您可以尝试通过创建 JSON 对象并获取数据:

JSONObject yourJsonObject = (JSONObject) new JSONParser().parse(yourJson);
JSONObject data = (JSONObject) yourJsonObject.get("data");
JSONObject data0 = (JSONObject) data.get(0);
JSONObject another_data = (JSONObject) data0.get("another_data");

String required_field1 = another_data.get("required_field1").toString();
String required_field2 = another_data.get("required_field2").toString();


现在您有了值,您可以将它们添加到您的 POJO 中。

于 2021-03-23T12:58:40.793 回答