【发布时间】:2019-09-12 20:47:40
【问题描述】:
所以,我四处寻找这个答案,但我还没有找到与我的情况相符的解决方案。基本上,我的 JSON 结构如下所示:
{
"count": 4424,
"results": [
{"id": 2718, "name": "fox", "location": "Omaha"},
{"id": 2719, "name": "bear", "location": "Miami"}
...
more objects containing an ID field
...
]
}
我希望能够解析出所有“id”值并将它们存储在一个列表中,我将循环该列表以对其他端点进行后续的 REST 调用。如果我想要包含 id 字段的整个对象,我知道我可以创建一个新对象并创建一个自定义 JSON 反序列化器,但由于它只是我想要的一个字段,所以感觉有点矫枉过正。
我最初的想法是在自定义反序列化器中做一些事情,如下所示:
List<String> idList = new ArrayList<String>();
JsonNode node = jp.getCodec().readTree(jp); // jp = JsonParser
JsonNode resultsNode = node.get("results");
resultsNode.forEach(result -> {
JsonNode idNode = result.get("id");
if (idNode != null) {
String id = idNode.textValue().toUpperCase();
idList.add(id);
}
});
这是处理这个问题的正确方法吗?如果没有,将这些 id 值解析为列表的最佳/有效方法是什么?
另外,我在网上阅读到可能想要在尝试这样的事情时进行缓存(列表可能包含 1000 多个 ID),但我不太确定在这种情况下这意味着什么。谁能解释一下?
【问题讨论】:
标签: java json list parsing jackson