一次只解析 JSON 中的特定字段

问题描述

我有一个巨大的 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)));
   }

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

解决方法

您可以尝试通过创建一个 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 中。