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

JsonPath双嵌套数组条件筛选返回结果异常问题排查

JsonPath嵌套过滤返回结果不符合预期问题修复

核心错误点

原表达式的内层过滤逻辑存在布尔判定歧义:
@.origins[?(@.source=='sourceA')]返回的是匹配规则的origins节点集合(数组类型),不是明确的布尔值。主流JsonPath实现(如Jayway)的过滤器对数组类型的判定逻辑为:只要路径指向的字段存在、值不为null,就判定条件为真,不会自动判断返回的节点集合是否非空(也就是不会自动校验是否真的存在匹配source值的项)。
这就导致过滤条件实际上只校验了type == 'eMail',只要contacts的type是eMail、且带有origins字段,就会被命中,最终返回全部邮箱。

测试样例JSON

对应描述的场景结构如下:

{
  "individuals": [
    {
      "contacts": [
        {
          "type": "eMail",
          "emailAddress": "sourceA@email.com",
          "origins": [{"source": "sourceA"}]
        },
        {
          "type": "eMail",
          "emailAddress": "sourceB@email.com",
          "origins": [{"source": "sourceB"}]
        }
      ]
    }
  ]
}

正确写法

替换为返回明确布尔值的包含判断,兼容所有主流JsonPath实现:

$..contacts[?(@.type == 'eMail' && @.origins[*].source contains 'sourceA')].emailAddress

逻辑说明:

  • 先通过@.origins[*].source拉取当前contact下所有origins的source字段,组成字符串数组
  • 用contains判断目标值sourceA是否在该数组内,这一步返回确定的true/false,无判定歧义
  • 执行后只会返回["sourceA@email.com"],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:03:30