我正在将我的 JSON 库从 org.json 更改为 Jackson,我想迁移以下代码:
JSONObject datasets = readJSON(new URL(DATASETS));
JSONArray datasetArray = datasets.getJSONArray("datasets");
现在在杰克逊,我有以下内容:
ObjectMapper m = new ObjectMapper();
JsonNode datasets = m.readTree(new URL(DATASETS));
ArrayNode datasetArray = (ArrayNode)datasets.get("datasets");
但是我不喜欢那里的演员表,是否有可能 ClassCastException
?是否有等同于 getJSONArray
in org.json
的方法,以便在它不是数组的情况下进行适当的错误处理?
原文由 Konrad Höffner 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,Jackson 手动解析器设计与其他库有很大不同。特别是,您会注意到
JsonNode
具有您通常会与其他 API 的数组节点相关联的大部分功能。因此,您无需转换为ArrayNode
即可使用。这是一个例子:JSON:
代码:
输出:
注意使用
isArray
在迭代之前验证节点实际上是一个数组。如果您对自己的数据结构绝对有信心,则无需进行检查,但如果您需要它(这与大多数其他 JSON 库没有什么不同)。