jsonnode example java json jackson

example - jsonnode java



readValue y readTree en Jackson: ¿cuándo usar cuál? (2)

Estoy empezando a usar la biblioteca Jackson JSON. Jackson es una biblioteca muy poderosa, pero tiene una API terriblemente extensa. Muchas cosas se pueden hacer de múltiples maneras. Esto hace que sea difícil encontrar su camino en Jackson. ¿Cómo saber cuál es la forma correcta / mejor de hacer las cosas?

¿Por qué usaría esta solución?

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()); } }

Sobre una solución como esta:

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()); } }

O sobre las soluciones que encontré utilizando JsonFactory y JsonParser y quizás incluso más opciones ...

Me parece que mapper.readValue es el más genérico y se puede usar en muchos casos: lea a JsonNode, ObjectNode, ArrayNode, PoJo, etc. Entonces, ¿por qué querría usar mapper.readTree?

¿Y cuál es la mejor manera de convertir un JsonNode en un ObjectNode? ¿Se acaba de lanzar a ObjectNode? ¿O usar algo como mapper.convertValue?


El valor de lectura se puede utilizar para sus propias clases de java:

public class Foo { private int a; private String b; private double[] c; // getters/setters } String json = "{/"a/":2, /"b/":/"a string/", /"c/": [6.7, 6, 5.6, 8.0]}"; ObjectMapper mapper = new ObjectMapper(); Foo foo = mapper.readValue(json, Foo.class);

es decir, puede elegir readTree cuando no conozca el tipo exacto del objeto, y readValue cuando sepa con seguridad el tipo de objeto.


readValue () se puede utilizar para todos y cada uno de los tipos, incluido JsonNode . readTree () solo funciona para JsonNode (modelo de árbol); y se agrega por conveniencia.

Tenga en cuenta que NUNCA desea usar su primer ejemplo: es equivalente a escribir su nodo como JSON, luego leerlo de nuevo, simplemente convertirlo.