Cómo analizar una cadena JSON en JsonNode en Jackson?
Debería ser tan simple, pero simplemente no puedo encontrarlo después de estar intentándolo durante una hora #avergonzando.
Necesito obtener una cadena JSON, por ejemplo, {"k1":v1,"k2":v2}
, analizada como JsonNode
.
JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = jp.readValueAsTree();
Da
java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree
5 answers
Una ligera variación en la respuesta de Richards pero readTree
puede tomar una cadena para que pueda simplificarla a:
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readTree("{\"k1\":\"v1\"}");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-03 20:37:03
Necesitas usar un ObjectMapper
:
ObjectMapper mapper = new ObjectMapper();
JsonFactory factory = mapper.getJsonFactory(); // since 2.1 use mapper.getFactory() instead
JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}");
JsonNode actualObj = mapper.readTree(jp);
Puede encontrar más documentación sobre la creación de analizadores aquí.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-28 15:39:32
Una tercera variante:
ObjectMapper mapper = new ObjectMapper();
JsonNode actualObj = mapper.readValue("{\"k1\":\"v1\"}", JsonNode.class);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-20 14:50:13
La respuesta de Richard es correcta. Alternativamente, también puede crear un MappingJsonFactory
(en org.codehaus.jackson.map
) que sabe dónde encontrar ObjectMapper
. El error se debe a que el paquete regular JsonFactory
(del paquete core
) no tiene ninguna dependencia de ObjectMapper
(que está en el paquete mapper
).
Pero normalmente solo usa ObjectMapper
y no se preocupe por JsonParser
u otros componentes de bajo nivel just solo serán necesarios si desea enlazar partes de flujo de datos, o hacer un manejo de bajo nivel.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-08 10:27:18
import com.github.fge.jackson.JsonLoader;
JsonLoader.fromString("{\"k1\":\"v1\"}")
== JsonNode = {"k1":"v1"}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-01 23:01:22