Ich fange gerade an, die Jackson JSON Bibliothek zu benutzen. Jackson ist eine sehr mächtige Bibliothek, aber es hat eine schrecklich umfangreiche API. Viele Dinge können auf verschiedene Arten getan werden. Das macht es schwer, sich in Jackson zurecht zu finden - wie kann man wissen, was der richtige/beste Weg ist?readValue und readTree in Jackson: wann welche verwenden?
Warum sollte ich diese Lösung:
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 folgt aus:
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 stieß auf mit JsonFactory und JsonParser und vielleicht sogar noch mehr Optionen ...
Es scheint mir, dass mapper.readValue ist am allgemeinsten und kann in vielen Fällen verwendet werden: lesen Sie zu JsonNode, ObjectNode, ArrayNode, PoJo, etc. Also warum sollte ich zu uns wollen e mapper.readTree?
Und was ist der beste Weg, um einen JsonNode in einen ObjectNode zu konvertieren? Einfach in den ObjectNode umwandeln? Oder verwenden Sie etwas wie mapper.convertValue?
Danke, das sind nützliche Informationen. Ich nahm an, dass convertValue schlau genug war, um so einfach wie möglich auf den richtigen Typ zu tippen, und dass es sicherer wäre als mich selbst zu werfen ... –
Das ist eine interessante Idee - vielleicht könnte ein solcher Code hinzugefügt werden? Name 'convert' soll Konversion vermitteln; nicht einfach zu werfen, aber ich denke, es ist keine unvernünftige Erwartung. Ich werde ein Verbesserungsproblem dafür einreichen. – StaxMan