Comment parsingr une chaîne JSON dans JsonNode dans Jackson?

Cela devrait être si simple, mais je ne peux tout simplement pas le trouver après avoir essayé pendant une heure #embarrasing.

Je dois par exemple obtenir une chaîne JSON, {"k1":v1,"k2":v2} , analysée en tant que JsonNode .

 JsonFactory factory = new JsonFactory(); JsonParser jp = factory.createJsonParser("{\"k1\":\"v1\"}"); JsonNode actualObj = jp.readValueAsTree(); 

donne

java.lang.IllegalStateException: No ObjectCodec defined for the parser, can not deserialize JSON into JsonNode tree

Une légère variation sur la réponse de Richards, mais readTree peut prendre une chaîne pour que vous puissiez la simplifier pour:

 ObjectMapper mapper = new ObjectMapper(); JsonNode actualObj = mapper.readTree("{\"k1\":\"v1\"}"); 

Vous devez utiliser 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); 

Vous trouverez plus de documentation sur la création d’parsingurs ici .

Une troisième variante:

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

La réponse de Richard est correcte. Vous pouvez également créer un MappingJsonFactory (dans org.codehaus.jackson.map ) qui sait où trouver ObjectMapper . L’erreur que vous avez rencontrée est que JsonFactory (à partir core package core ) ne dépend pas d’ ObjectMapper (qui se trouve dans le package mapper ).

Mais en général, il vous suffit d’utiliser ObjectMapper et de ne pas vous soucier de JsonParser ou d’autres composants de bas niveau. Ils seront simplement nécessaires si vous souhaitez lier des parties de stream de données ou effectuer une manipulation de bas niveau.

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