Я только начинаю использовать библиотеку Jackson JSON. Джексон - очень мощная библиотека, но у нее очень обширный API. Многое можно сделать несколькими способами. Это затрудняет поиск вашего пути в Джексоне - как узнать, что является правильным/лучшим способом делать вещи?readValue и readTree в Джексоне: когда использовать какой?
Почему бы использовать это решение:
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 и т. Д. Так почему бы мне захотеть e mapper.readTree?
И что является лучшим способом преобразования JsonNode в ObjectNode? Просто добавлено в ObjectNode? Или использовать что-то вроде mapper.convertValue?
спасибо, это полезная информация. Я предположил, что convertValue был достаточно умен, чтобы по возможности прибегать к правильному типу, и что это было бы безопаснее, чем литье себя ... –
Это интересная идея - может быть, такой код можно было бы добавить? Имя «конвертировать» предназначено для преобразования; а не просто бросить, но я думаю, это не необоснованное ожидание. Для этого я напишу исправление. – StaxMan