在杰克逊中过滤 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();
}
}
}

这对我有用。我只想知道有没有一种更干净的方法可以在不遍历整个子数组的情况下做到这一点?因为数组的大小可能很大。

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

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

您可以将 JsonPath 表达式$.children[?(@.key==456)].name用于查询,Jayway JsonPath 库中支持该表达式。

最新更新