Ich habe gerade angefangen, die Jackson JSON-Bibliothek zu verwenden. Jackson ist eine sehr leistungsstarke Bibliothek, aber sie hat eine schrecklich umfangreiche API. Vieles kann auf verschiedene Arten erledigt werden. Dies macht es schwierig, sich in Jackson zurechtzufinden - wie weiß man, was der korrekte/beste Weg ist, um Dinge zu tun?
Warum sollte ich diese Lösung verwenden:
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());
}
}
Über eine Lösung wie diese:
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());
}
}
Oder über Lösungen, die ich gefunden habe, die JsonFactory und JsonParser verwenden und vielleicht sogar mehr Optionen...
Es scheint mir, dass mapper.readValue am allgemeinsten ist und in vielen Fällen verwendet werden kann: Lesen zu JsonNode, ObjectNode, ArrayNode, PoJo, etc. Warum sollte ich also mapper.readTree verwenden?
Und was ist der beste Weg, um ein JsonNode in ein ObjectNode umzuwandeln? Einfach zu ObjectNode casten? Oder etwas wie mapper.convertValue verwenden?