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

如何通过子节点匹配获取JSONPath中的父节点number字段?

JSONPath查询嵌套数组的匹配问题

目标JSON

[        
    {
        "number": "5422",
        "sender": [
            {
                "id": "6001"
            },
            {
                "id": "7371"
            }
        ],
        "receiver": [
            {
                "id": "6205"
            },
            {
                "id": "3803"
            },
            {
                "id": "5601"
            }
        ]
    }    
]

查询需求

筛选出sender数组中存在指定id、且receiver数组中存在另一指定id的条目,返回对应的number字段值,全程使用JSONPath完成,不修改原文件。

失败原因分析

你之前的查询写法错误在于:sender和receiver是数组结构,直接用@.sender.id会返回该数组所有元素的id集合,无法直接与单个值做相等判断,必须明确检查数组中是否存在符合条件的元素。

正确查询表达式

以下是几种适配不同JSONPath实现的有效写法:

写法1(支持exists关键字的实现,如Jayway)

$[?(exists(@.sender[?(@.id == '6001')]) && exists(@.receiver[?(@.id == '6205')]))].number

逻辑:先判断sender数组中是否存在id为'6001'的元素,同时receiver数组中存在id为'6205'的元素,再提取对应number。

写法2(支持contains关键字的实现)

$[?(@.sender[*].id contains '6001' && @.receiver[*].id contains '6205')].number

逻辑:检查sender数组的所有id集合是否包含目标值,同时receiver的id集合也包含对应目标值。

写法3(支持any关键字的实现)

$[?(any(@.sender, @.id == '6001') && any(@.receiver, @.id == '6205'))].number

逻辑:用any判断数组中是否存在至少一个元素满足id匹配条件。

以上表达式都能正确返回符合条件的"5422"。

内容的提问来源于stack exchange,提问作者user21448519

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:13:14