[英]How to parse a JSON string into JsonNode in Jackson?
应该就是这么简单,可是试了一个小时还是找不到。
我需要获取一个 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
或其他低级组件——如果您想对流的部分进行数据绑定或进行低级处理, JsonParser
需要它们。
import com.github.fge.jackson.JsonLoader;
JsonLoader.fromString("{\"k1\":\"v1\"}")
== JsonNode = {"k1":"v1"}
旧问题的新方法。 一个适用于 java 9+ 的解决方案
ObjectNode agencyNode = new ObjectMapper().valueToTree(Map.of("key", "value"));
对于复杂的对象,更具可读性和可维护性。 Ej
Map<String, Object> agencyMap = Map.of(
"name", "Agencia Prueba",
"phone1", "1198788373",
"address", "Larrea 45 e/ calligaris y paris",
"number", 267,
"enable", true,
"location", Map.of("id", 54),
"responsible", Set.of(Map.of("id", 405)),
"sellers", List.of(Map.of("id", 605))
);
ObjectNode agencyNode = new ObjectMapper().valueToTree(agencyMap);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.