调用findValue方法时JsonNode返回null?

时间:2016-03-16 18:04:55

标签: java json jackson

这是一个例子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”)。我仍然无效。

由于

3 个答案:

答案 0 :(得分:2)

convertValue函数用于将一个实例类型转换为另一个实例类型。这是一个两步转换过程,相当于首先将给定值序列化为JSON,然后将JSON数据绑定到第二个给定类型的值。

在上面的例子中,convertValue的第一个参数实际上是一个JSON(用字符串表示)而不是一个对象,因此这不起作用。

要使其工作,您可以使用以下方法:

方法1:

JsonNode node = jsonMapper.readTree(jsonRoot);

这会将json反序列化为树,并返回树的根,现在可用于遍历。

方法2:

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)

这两种方法之间有区别

  1. JsonNode.get()方法返回null
  2. 使用JsonNode.path(String).asText()检查节点是否存在或 不,否则返回空字符串。