无需迭代即可在Jackson中过滤JsonNode数组

时间:2018-10-05 04:09:02

标签: json jackson jsonnode

Json:

{  
   "type":"book",
   "children":[  
      {  
         "key":"123",
         "name":"book1"
      },
      {  
         "key":"456",
         "name":"book2"
         ]
      }
   ]
}

我只想在key =“ 456”时以字符串的形式获取书名。

这就是我所拥有的:

JsonNode root = mapper.readTree(investigation.getFilterModel());
JsonNode children = root.path("children");
            if (children.isArray())
            {
                for (final JsonNode objNode : children)
                {
                    if ("456".equalsIgnoreCase(objNode.path("key").textValue()))
                    {
                        String bookName = objNode.path("name").textValue();
                    }
                }
            }

这对我有用。我只想知道是否有一种更干净的方法可以做到而又不会遍历整个子级数组?由于数组的大小可能很大。

1 个答案:

答案 0 :(得分:1)

Jackson无法进行这种查询。当您知道元素所在的数组索引时,最多可以使用JsonPointer表达式:

root.at("/children/1/name");

您可以对Jayway JsonPath库支持的查询使用JsonPath表达式$.children[?(@.key==456)].name