如何在JSONPath中通过节点键过滤符合条件的元素?
用JSONPath筛选键大于指定值的对象元素
输入JSON数据
{"data": {"ticket": {"1": "foo","2": "bar","3": "baz"}}}
期望输出
{"3": "baz"}
需求说明
需要筛选ticket对象中**键大于"2"**的元素,已知ticket的所有键都是字符串形式的整数。之前尝试过用$.data.ticket.*~匹配所有节点键,也了解基础筛选语法(比如$..book[?(@.price<10)]),现在需要结合两者实现目标。
解决方案
使用包含键比较的JSONPath表达式:
$.data.ticket[?(@property > '2')]
表达式解析
@property:在JSONPath过滤逻辑中,代表当前遍历到的对象的键(对应你之前用*~获取键的需求)[?(@property > '2')]:过滤出键(字符串形式)大于"2"的键值对,因为所有键都是整数形式的字符串,直接字符串比较即可得到正确结果;如果需要严格按数字比较,可以用@property - 0 > 2将键转为数字后再比较:$.data.ticket[?(@property - 0 > 2)]
验证结果
执行上述表达式后,会返回ticket中键大于"2"的元素,即{"3": "baz"},符合期望输出。
内容的提问来源于stack exchange,提问作者oikonomopo
相关产品推荐
相关产品推荐

