首页 文章

如何将JSON字符串解析为Jackson中的JsonNode?

提问于
浏览
203

它应该是这么简单,但在尝试了一个小时#embarrasing之后我就找不到了 .

我需要获取一个JSON字符串,例如 {"k1":v1,"k2":v2} ,解析为 JsonNode .

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

java.lang.IllegalStateException:没有为解析器定义的ObjectCodec,无法将JSON反序列化为JsonNode树

5 回答

  • 66

    第三种变体:

    ObjectMapper mapper = new ObjectMapper();
    JsonNode actualObj = mapper.readValue("{\"k1\":\"v1\"}", JsonNode.class);
    
  • 3
    import com.github.fge.jackson.JsonLoader;
    JsonLoader.fromString("{\"k1\":\"v1\"}")
    == JsonNode = {"k1":"v1"}
    
  • 27

    Richards回答略有不同,但 readTree 可以采用字符串,因此您可以将其简化为:

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

    理查德的回答是正确的 . 或者你也可以创建一个 MappingJsonFactory (在 org.codehaus.jackson.map 中)知道在哪里找到 ObjectMapper . 您得到的错误是因为常规 JsonFactory (来自 core 包)与 ObjectMapper (在 mapper 包中)没有依赖关系 .

    但通常你只需使用 ObjectMapper 并且不用担心 JsonParser 或其他低级组件 - 如果你想对数据绑定流进行数据绑定或进行低级处理,则只需要它们 .

  • 330

    您需要使用 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);
    

    有关创建解析器的更多文档可以在here找到 .

相关问题