JSON Path表达式嵌套使用报错,求获取指定书籍作者名的正确语法
问题排查与解决方案
你的JSONPath表达式报错的核心原因有两个:
- 多数JSONPath实现不支持在过滤谓词(
[?()]内部)嵌套完整的JSONPath查询,尤其是这种返回数组的子查询; $.books[?(@.name == "The Hitchhiker's Guide to the Galaxy")].author_id返回的是一个数组(即使只有一个元素,结果也是[1]),直接用数组和单个数值@.id做==比较逻辑不成立。
正确的JSONPath表达式(适配Jayway等主流实现)
如果你使用的是Jayway JSONPath(多数在线工具使用的实现),可以通过明确取数组第一个元素的方式修正:
$.authors[?(@.id == $.books[?(@.name == "The Hitchhiker's Guide to the Galaxy")].author_id[0])].name
或者用更简洁的递归匹配写法:
$.authors[?(@.id == $..books[?(@.name == "The Hitchhiker's Guide to the Galaxy")].author_id[0])].name
兼容更多实现的分步解法
如果你的JSONPath引擎不支持嵌套查询,可以分两步操作:
- 先提取目标书籍的作者ID:
得到结果$.books[?(@.name == "The Hitchhiker's Guide to the Galaxy")].author_id1; - 再用该ID匹配作者:
$.authors[?(@.id == 1)].name
以上两种方式都能准确获取到Douglas Adams这个结果。
内容的提问来源于stack exchange,提问作者Nicolas Talfer
相关产品推荐
相关产品推荐

