objectnode jsonnode convert java json parsing jackson

java - convert - jsonnode to string



¿Cómo analizar una cadena JSON en JsonNode en Jackson? (5)

Debería ser tan simple, pero simplemente no puedo encontrarlo después de intentarlo durante una hora.

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


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 que recibió fue porque el JsonFactory regular (del paquete del core ) no tiene dependencia de ObjectMapper (que se encuentra en el paquete del mapper ).

Pero generalmente solo usa ObjectMapper y no se preocupa por JsonParser u otros componentes de bajo nivel; solo serán necesarios si desea vincular partes de la secuencia de datos, o hacer un manejo de bajo nivel.


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 here .


Una pequeña 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/"}");


Una tercera variante:

ObjectMapper mapper = new ObjectMapper(); JsonNode actualObj = mapper.readValue("{/"k1/":/"v1/"}", JsonNode.class);


import com.github.fge.jackson.JsonLoader; JsonLoader.fromString("{/"k1/":/"v1/"}") == JsonNode = {"k1":"v1"}