如何使用JSONPath过滤功能查询非数组子对象的属性满足指定条件
问题原因
JSONPath的过滤语法[?(判断表达式)]的默认作用对象是数组,你将它用在了非数组的queue对象后面,绝大多数JSONPath实现不会主动遍历普通对象的子属性来执行过滤规则,所以$.queue[?(@.size>0)]无法匹配到结果。你之前写的$.queue[size]本质是属性访问的简写写法,等价于$.queue.size,不属于过滤语法范畴,所以可以正常返回数值。
解决方法
你可以直接对size属性的值应用过滤规则,使用以下查询语句即可:$.queue.size[?(@ > 0)]
效果验证
- 当
queue.size为13时,查询会返回[13],符合匹配要求 - 当
queue.size为0时,查询会返回空数组,无匹配结果
如果你的JSONPath实现不支持直接对单个值做过滤,也可以用兼容写法:$[?(@.queue.size > 0)].queue.size
该语句会先判断根节点下的queue.size是否满足大于0的条件,满足时返回对应size值,否则返回空。
内容的提问来源于stack exchange,提问作者piro91
相关产品推荐
相关产品推荐

