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

JSONPath如何过滤嵌套数组?根据指定planId获取对应skuId

解答

这个嵌套数组过滤查询需求完全可以通过JsonPath实现,不需要额外复杂的替代方案。

可用JsonPath表达式

针对你给出的示例数据,匹配目标planId对应skuId的JsonPath写法如下:

$.[?(@.plans[*].plan.planId == 'loks3123')].skuId

如果需要动态匹配不同的planId,只需要把表达式里的'loks3123'替换成目标planId的实际值即可。

表达式逻辑说明

  • $ 指代JSON的根节点,也就是你数据里最外层的sku数组
  • [?(过滤条件)] 是JsonPath的过滤器语法,会遍历根数组下的每一个sku对象,筛选符合条件的项
  • 过滤条件@.plans[*].plan.planId == 'loks3123':对当前遍历到的sku对象,检查其plans数组下所有子项嵌套的plan.planId字段,只要存在值等于目标值,就判定当前sku匹配
  • 末尾的.skuId表示提取所有匹配到的sku对象的skuId字段
    在你给出的示例数据上执行该表达式,返回结果为["1234"],和预期结果一致。

兼容性与替代方案

绝大多数主流JsonPath实现(包括Jayway JsonPath、JsonPath-Plus等各语言常用库)都支持上述写法。如果你使用的是非常老旧的JsonPath库、不支持过滤条件内直接嵌套数组通配匹配,直接用原生遍历处理即可:
将JSON反序列化为对应编程语言的原生对象/结构体,做两层遍历:先遍历外层sku列表,对每个sku遍历其下的plans数组,找到planId等于目标值的项时,直接返回当前sku的skuId即可。这种方案逻辑简单无额外依赖,性能也没有额外损耗,比硬凑不兼容的JsonPath写法更稳妥。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:39:15