Jackson中的readValue和readTree:什么时候使用?

我刚刚开始使用Jackson

JSON库。杰克逊(Jackson)是一个非常强大的库,但是它具有非常丰富的API。许多事情可以通过多种方式完成。这使得在Jackson很难找到自己的出路-

如何知道什么是正确/最佳的做事方式?

我为什么要使用此解决方案:

String json = "{\"a\":2, \"b\":\"a string\", \"c\": [6.7, 6, 5.6, 8.0]}";

ObjectMapper mapper = new ObjectMapper();

JsonNode node = mapper.readValue(json, JsonNode.class);

if (node.isObject()) {

ObjectNode obj = mapper.convertValue(node, ObjectNode.class);

if (obj.has("a")) {

System.out.println("a=" + obj.get("a").asDouble());

}

}

通过这样的解决方案:

String json = "{\"a\":2, \"b\":\"a string\", \"c\": [6.7, 6, 5.6, 8.0]}";

ObjectMapper mapper = new ObjectMapper();

JsonNode node = mapper.readTree(json);

if (node.isObject()) {

ObjectNode obj = (ObjectNode) node;

if (obj.has("a")) {

System.out.println("a=" + obj.get("a").asDouble());

}

}

或超过我使用JsonFactory和JsonParser遇到的解决方案,甚至还有更多选择…

似乎mape.readValue是最通用的,可以在很多情况下使用:读取到JsonNode,ObjectNode,ArrayNode,PoJo等。那么为什么我要使用mapper.readTree?

将JsonNode转换为ObjectNode的最佳方法是什么?只是投射到ObjectNode?还是使用诸如mapper.convertValue之类的东西?

回答:

readValue()可用于任何和所有类型,包括JsonNode。readTree()仅适用于JsonNode(树模型);并为方便起见而添加。

请注意,您永远都不想使用第一个示例:它等效于将节点写为JSON,然后再读回-只需对其进行转换即可。

以上是 Jackson中的readValue和readTree:什么时候使用? 的全部内容, 来源链接: utcz.com/qa/432594.html

回到顶部