JSONPath表达式报错排查:查找作者为Mariangela的书籍
查找Mariangela撰写书籍的JSONPath表达式错误排查
原始JSON数据
{ "books": [ { "id": 1, "name": "República Brasileira. de Deodoro a Bolsonaro - 2° Edição", "writers": [ { "name": "Paulo Ghiraldelli Jr.", "id": 1 }, { "name": "Mariangela", "id": 2 } ] }, { "id": 2, "writers": [ { "name": "Ilan Lapyda", "id": 3 } ] } ] }
问题描述
想要查找由Mariangela撰写的书籍,尝试了如下JSONPath表达式:
$.books[?(@.writers[*]['name']=='Mariangela')]
但收到错误提示:Invalid X-JSON-Path expression passed
错误原因
你的写法存在两个核心问题:
@.writers[*]['name']会返回当前书籍所有作者名的数组(比如第一本书返回["Paulo Ghiraldelli Jr.", "Mariangela"]),直接把数组和字符串'Mariangela'做相等比较,不符合多数JSONPath解析器的语法规则——不同类型的值无法直接判断相等。- 你使用的X-JSON-Path实现,不支持在过滤条件中用
[*]展开数组后直接做比较操作。
正确的JSONPath表达式
改用嵌套过滤的写法,直接检查writers数组中是否存在名字为Mariangela的元素,这是多数JSONPath实现都支持的通用语法:
$.books[?(@.writers[?(@.name == 'Mariangela')])]
这个表达式的逻辑是:遍历books数组中的每一本书,检查其writers数组里是否有满足name == 'Mariangela'的作者,只要存在就把这本书筛选出来。
如果你的JSONPath实现支持集合判断语法(比如部分现代JSONPath库),也可以用更简洁的写法:
$.books[?('Mariangela' in @.writers[*].name)]
内容的提问来源于stack exchange,提问作者user2919910
相关产品推荐
相关产品推荐

