Estoy empezando a usar la biblioteca Jackson JSON. Jackson es una biblioteca muy poderosa, pero tiene una API terriblemente extensa. Se pueden hacer muchas cosas de múltiples maneras. Esto hace que sea difícil encontrar tu camino en Jackson, ¿cómo saber cuál es la forma correcta/mejor de hacer las cosas?readValue y readTree en Jackson: ¿cuándo usar qué?
Por qué debería utilizar 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());
}
}
Durante 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 más soluciones que me encontré con el uso de JsonFactory y JsonParser y tal vez incluso más opciones ...
Me parece que mapper.readValue es el más genérico y se puede usar en muchos casos: lea JsonNode, ObjectNode, ArrayNode, PoJo, etc. Entonces, ¿por qué querríamos nosotros? e mapper.readTree?
¿Y cuál es la mejor manera de convertir un JsonNode en un ObjectNode? ¿Simplemente enviar a ObjectNode? O use algo como mapper.convertValue?
gracias, esta es información útil. Supuse que convertValue era lo suficientemente inteligente como para simplemente lanzar al tipo correcto cuando fuera posible y que sería más seguro que lanzarme ... –
Esa es una idea interesante, ¿tal vez podría agregarse ese código? El nombre 'convertir' está destinado a transmitir la conversión; no simplemente lanzar, pero supongo que no es una expectativa irracional. Voy a presentar un problema de mejora para esto. – StaxMan