JsonPath查询如何限制仅返回根层级匹配项,排除子层级匹配结果
JsonPath仅匹配根层级节点解决方案
问题原因
当前查询返回多组结果,是因为查询模式触发了全层级递归扫描:如果使用了递归下降运算符..,或是你所用的JsonPath实现默认开启了深层匹配,就会同时匹配根数组对象和嵌套在images数组内的id为2的子对象。
解决方案
调整查询表达式为以下两种形式均可实现需求:
- 带字段校验的精准匹配(兼容性最好,所有JsonPath实现都支持)
$[?(@.id == 2 && @.images != null)]
利用根层级对象独有images字段的特性,过滤掉不存在该字段的子层级匹配项,最终只会返回需要的根层级对象。
提示:如果你的数据中id字段为字符串类型,将表达式中的
2改为'2'即可。
- 严格根数组直接子元素匹配
如果你所用的JsonPath实现遵循标准语法规范,直接使用如下表达式即可:
$[?(@.id == 2)]
标准语法中$[?(condition)]明确仅对根数组的直接子元素做条件校验,不会遍历嵌套层级。
验证结果
使用上述表达式查询后,返回结果如下,完全符合预期:
{ "id": 2, "images": [ { "id": 1, "url": "http://url3.jpg" }, { "id": 2, "url": "http://url4.jpg" } ] }
内容的提问来源于stack exchange,提问作者agi31
相关产品推荐
相关产品推荐

