You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

错误原因

你的写法存在两个核心问题:

  1. @.writers[*]['name']会返回当前书籍所有作者名的数组(比如第一本书返回["Paulo Ghiraldelli Jr.", "Mariangela"]),直接把数组和字符串'Mariangela'做相等比较,不符合多数JSONPath解析器的语法规则——不同类型的值无法直接判断相等。
  2. 你使用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:07:26