我刚刚开始使用 Jackson JSON 库。 Jackson 是一个非常强大的库,但它有非常广泛的 API。很多事情可以通过多种方式完成。这使得你很难在杰克逊找到自己的方式——如何知道什么是正确/最好的做事方式?
为什么我要使用这个解决方案:
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 遇到的解决方案,甚至可能还有更多选项......
看来mapper.readValue是最通用的,可以在很多情况下使用:读取JsonNode、ObjectNode、ArrayNode、PoJo等。那么为什么我要使用mapper.readTree呢?
将 JsonNode 转换为 ObjectNode 的最佳方法是什么?只是转换到 ObjectNode 吗?或者使用诸如mapper.convertValue之类的东西?