这是一个例子json
{
"key1": {
"key2": {
"key3": "value3"
}
}
}
我想得到key3的值,即“value3”
findValue
类的JsonNode
方法应该符合此目的。
所以我尝试了以下内容:
final ObjectMapper jsonMapper = new ObjectMapper();
String jsonRoot = "{\"key1\":\n" + " {\"key2\":\n" + " {\"key3\":\"value3\"}\n" + " }\n" + "}";
JsonNode node = jsonMapper.convertValue(jsonRoot,JsonNode.class);
JsonNode found = node.findValue("key3");
System.out.println(found.asText());
System.out.println(found.isObject());
但是,我看到“找到”为空。 我无法弄清楚为什么会失败。我也试过node.findValue(“key2”)。我仍然无效。
由于
答案 0 :(得分:2)
convertValue函数用于将一个实例类型转换为另一个实例类型。这是一个两步转换过程,相当于首先将给定值序列化为JSON,然后将JSON数据绑定到第二个给定类型的值。
在上面的例子中,convertValue的第一个参数实际上是一个JSON(用字符串表示)而不是一个对象,因此这不起作用。
要使其工作,您可以使用以下方法:
JsonNode node = jsonMapper.readTree(jsonRoot);
这会将json反序列化为树,并返回树的根,现在可用于遍历。
JsonNode node = jsonMapper.readValue(jsonRoot,JsonNode.class);
这将直接将json反序列化为JsonNode对象。
答案 1 :(得分:0)
所以这样的事情应该有效。(虽然未经测试)
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(new File("c:\\example.json"));
JsonNode key1Node = root.path("key1");
JsonNode key2Node = key1Node.path("key2");
密钥3节点的访问值
String val = key2Node.path("key3").asText();
参见参考here。
答案 2 :(得分:0)
这两种方法之间有区别