我有一个嵌套 json 对象的示例,如下所示:
{
"payload": {
"id": "1",
"apiResp": {
"apiRespDetails": {
"report": {
"reportId": "reportid1",
"reportDetails": [
{
"code": "1",
"rating": "good"
},
{
"code": "2",
"rating": "bad"
},
{
"code": "3",
"rating": "fair"
}
]
}
}
}
}
}
我只需要报表对象,不需要其父对象的任何详细信息。使用 Jackson API 实现这一点的最佳方法是什么?
我创建了一个名为 Report.java 的 Java 类,其中包含字段 reportId (String) 和 reportDetails(List of ReportDetail ),其中 ReportDetail 是另一个具有字符串字段 code 、 rating 等的类。我是否需要使用一些 Deserializer、JsonTreeParser 机制?谢谢。
最佳答案
这个问题的解决方案是jayway Java implementation for JsonPath .
JsonPath是 XPath 的等效 json XML 的查询语言。
查询语言非常强大,可以在 github 自述文件的示例中看到。
这里有一个快速演示,可以帮助您入门:
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import com.jayway.jsonpath.*;
import net.minidev.json.JSONArray;
import static com.jayway.jsonpath.matchers.JsonPathMatchers.*;
public class JsonPathDemo2
{
public static void main(String[] args)
{
// query: search for any report property below root
String jsonPathQuery = "$..report";
try (InputStream is = Files.newInputStream(Paths.get("C://temp/xx.json"))) {
Object parsedContent =
Configuration.defaultConfiguration().jsonProvider().parse(is, StandardCharsets.UTF_8.name());
System.out.println("hasJsonPath? " + hasJsonPath(jsonPathQuery).matches(parsedContent));
Object obj = JsonPath.read(parsedContent, jsonPathQuery);
System.out.println("parsed object is of type " + obj.getClass());
System.out.println("parsed object to-string " + obj);
JSONArray arr = (JSONArray)obj;
System.out.println("first array item is of type " + arr.get(0).getClass());
System.out.println("first array item to-string " + arr.get(0));
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出:
hasJsonPath? true
parsed object is of type class net.minidev.json.JSONArray
parsed object to-string [{"reportId":"reportid1","reportDetails":[{"code":"1","rating":"good"},{"code":"2","rating":"bad"},{"code":"3","rating":"fair"}]}]
first array item is of type class java.util.LinkedHashMap
first array item to-string {reportId=reportid1, reportDetails=[{"code":"1","rating":"good"},{"code":"2","rating":"bad"},{"code":"3","rating":"fair"}]}
关于java - Jackson JSON Java 嵌套对象和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42121170/