1

杰森:

{  
   "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();
                    }
                }
            }

这对我有用。我只是想知道是否有一种更清洁的方法可以在不遍历整个儿童数组的情况下做到这一点?由于数组的大小可能很大。

4

1 回答 1

3

对于杰克逊来说,这种查询是不可能的。当您知道元素所在的数组索引时,您最多可以使用JsonPointer表达式:

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

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

于 2018-10-05T06:42:14.537 回答