如何在jacksonparsing一个JSONstring到JsonNode?

它应该是这么简单,但我试图在一小时后,找不到它#embarrasing。

我需要得到一个JSONstring,例如, {"k1":v1,"k2":v2} ,parsing为一个JsonNode

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

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

Richards答案略有差异,但readTree可以采取一个string,所以你可以简化它:

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

你需要使用一个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); 

第三个变体:

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

理查德的回答是正确的。 或者,您也可以创build一个MappingJsonFactory (在org.codehaus.jackson.map ),它知道在哪里可以findObjectMapper 。 你得到的错误是因为常规JsonFactory (来自core包)对ObjectMapper (它在mapper程序包中)没有依赖性。

但通常你只是使用ObjectMapper ,而不用担心JsonParser或其他低级别的组件 – 如果你想要对数据stream进行数据绑定,或者进行低级别的处理,只需要它们。

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