如何基于JSON文档中的person.id值执行JSONPath查询?
解决JSONPath匹配person.id对应account的问题
原表达式的问题
你写的表达式$..accounts[?@.id == $.person.id]]存在两个问题:
- 末尾多了一个多余的闭合方括号
],属于语法错误 - 部分JSONPath实现中,过滤谓词(
[?...])内的$会指向当前遍历的数组元素,而非根节点,导致无法正确引用$.person.id
正确的JSONPath表达式
根据不同的JSONPath实现,有两种可靠写法:
写法1:明确根节点引用(支持$root的实现,如Jayway JSONPath)
$.result.accounts[?@.id == $root.person.id]
用$root明确指定根节点,确保在谓词中能正确取到person.id的值。
写法2:直接使用根路径(部分实现支持,如Goessner的JSONPath)
$.result.accounts[?@.id == $.person.id]
去掉多余的方括号后,直接用根路径引用$.person.id,部分实现可以正确识别这个引用。
验证结果
使用上述正确表达式后,会返回匹配的account对象:
{ "id": "5678", "details": [ { "name": "efgh" } ] }
注:你期望的结果中details里的id字段在原始JSON中不存在,应该是笔误,实际返回结果会和原始JSON结构一致。
内容的提问来源于stack exchange,提问作者Andy Huang
相关产品推荐
相关产品推荐

