如何将JSON字符串解析到Jackson的JSONNODE中?
题
它应该是如此简单,但是我只是在尝试一个小时#embarrass后就找不到它。
例如,我需要得到一个JSON字符串 {"k1":v1,"k2":v2}
, ,被解析为 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
解决方案
理查兹答案有轻微的变化 readTree
可以采用一个字符串,因此您可以将其简化为:
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);
理查德的答案是正确的。或者,您也可以创建一个 MappingJsonFactory
(在 org.codehaus.jackson.map
)知道在哪里可以找到 ObjectMapper
. 。您遇到的错误是因为常规 JsonFactory
(从 core
包)没有依赖性 ObjectMapper
(在 mapper
包裹)。
但是通常您只是使用 ObjectMapper
不用担心 JsonParser
或其他低级组件 - 如果您想了解流的数据结合部分或进行低级处理,则只需要它们即可。
import com.github.fge.jackson.JsonLoader;
JsonLoader.fromString("{\"k1\":\"v1\"}")
== JsonNode = {"k1":"v1"}
不隶属于 StackOverflow