如何在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"}