问题描述
我有一个巨大的 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_field1 和 required_field2。
更新:
- 现在如何运作
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 中。