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

如何使用JSONPath按子数组inplay属性过滤获取根数组完整sport对象

正确JSONPath表达式

对于你描述的场景,兼容绝大多数主流JSONPath解析器(如Jayway、jsonpath-ng、JSONPath-Plus)的写法如下:

$[?(@.regions[?(@.leagues[?(@.inplay == 0)])])]

原写法失效原因

你之前尝试的$[?(@.regions[*].leagues[*].inplay == 0)]无法生效,是因为regions[*].leagues[*].inplay在过滤条件中返回的是值数组,大部分JSONPath解析器不支持直接用数组和单个值做相等性判定,因此会始终返回false。

正确写法逻辑

嵌套过滤的逻辑是逐层判定是否存在符合要求的子元素:

  1. 最内层@.leagues[?(@.inplay == 0)]:筛选单个地区下所有inplay=0的联赛,只要存在匹配项就返回非空数组
  2. 中间层@.regions[?()]:筛选当前运动项目下存在符合要求联赛的地区,只要有一个地区满足就返回非空数组
  3. 最外层过滤条件只要中间层返回非空,就判定当前运动项目符合要求,返回完整对象

将该表达式代入你提供的测试JSON运行,会准确返回name为Tennis的完整sport对象,符合你的预期。

小提示:如果你使用的JSONPath解析器不支持嵌套过滤,可尝试对应解析器的数组包含语法,例如Jayway实现下可写为$[?(@.regions[*].leagues[*].inplay contains 0)]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:30:01