杰克逊如何将JsonNode转换为ArrayNode而不进行转换?

我将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吗?有没有一种等效于的方法getJSONArrayorg.json以便在不是数组的情况下进行适当的错误处理?

回答:

是的,Jackson手动解析器的设计与其他库完全不同。特别是,您会注意到它JsonNode具有通常与其他API的数组节点关联的大多数功能。因此,您无需强制转换为ArrayNode即可使用。这是一个例子:

{

"objects" : ["One", "Two", "Three"]

}

final String json = "{\"objects\" : [\"One\", \"Two\", \"Three\"]}";

final JsonNode arrNode = new ObjectMapper().readTree(json).get("objects");

if (arrNode.isArray()) {

for (final JsonNode objNode : arrNode) {

System.out.println(objNode);

}

}

输出:

“一个”

“两个”

“三个”

请注意,isArray在迭代之前使用来验证该节点实际上是一个数组。如果您对数据结构绝对有信心,则不必进行检查,但是如果您需要它,可以进行检查(这与大多数其他JSON库没有什么不同)。

以上是 杰克逊如何将JsonNode转换为ArrayNode而不进行转换? 的全部内容, 来源链接: utcz.com/qa/424640.html

回到顶部