【发布时间】:2019-11-27 08:38:45
【问题描述】:
所以我得到了这个 JSON 结构作为 HTTP 响应。结构如下:
{
"field1": "value1",
"field2": {
"field2-2": [
{
"field2-2-1": "some value",
"field2-2-2": {
"key" : "some value"
}
}
]
}
}
当然我简化了它,但你明白了。现在我使用 Gson 将其转换为 HashMap:
HashMap<String, Object> resultMap = new Gson().fromJson(httpResult, type);
现在,要在 Java 中访问“field2-2-2”,我这样做:
LinkedTreeMap someMap = (LinkedTreeMap) resultMap.get("field2");
ArrayList<LinkedTreeMap> someList = (ArrayList) someMap.get("field2-2");
LinkedTreeMap anotherMap = someList.get(0);
anotherMap.get("key");
我再次对其进行了简化,但有没有更好的方法来访问这个“深层”字段?或者为了可读性,我可以以某种方式链接方法吗?我的意思是,如果这一切都是 ArrayLists,我可以这样做:
ArrayList<Arraylist<String>> sampleList = new ArrayList<>();
sampleList.get(0).get(0);
【问题讨论】:
-
您是否尝试过将此结构直接反序列化为匹配的 POJO?
-
你能使用像
Jackson或JsonPath这样的库吗?如果是,它们允许您提供类似/field2/field2-2/field2-2-2/key的路径。Jackson支持 JSON Pointer。也可以看看:Parsing deeply nested JSON properties with Jackson,Iterate over a large JSON Array with JSONPath -
Michał Ziober,我认为这是最有用的回复,谢谢
-
@MaxUrbanowicz,应该很容易使用
JsonPath或JsonPointer和Jackson。如果您发现问题,只需使用您拥有的代码更新问题并提出新问题。 -
我建议考虑面向流的解析而不是对象映射。 Gson 和 Jackson 都支持它。另外,你可以看一个简单快速的解析器示例github.com/anatolygudkov/green-jelly