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

如何用JSONPath-Plus筛选blob类型条目并保留嵌套结构?

问题:使用JSONPath-Plus筛选Blob类型条目并保留嵌套数组结构

我有如下JSON数据:

[
  {
    "id": "9a884faee51213bd0fd9b5e97ad5fd0c54e92d8d",
    "name": "75193f9f-836a-47ba-b425-b00bca0806ea.yml",
    "type": "blob",
    "path": "75193f9f-836a-47ba-b425-b00bca0806ea.yml",
    "mode": "100644"
  },
  {
    "id": "7914859dd416825ab79095abc57c717af3219672",
    "name": "subdir",
    "type": "tree",
    "path": "subdir",
    "mode": "100644"
  },
  {
    "id": "1f13b33dee8aa81516935ce476126116b5416b40",
    "name": "117f2ace-70a3-42a7-8018-aa1105d062dd.yml",
    "type": "blob",
    "path": "117f2ace-70a3-42a7-8018-aa1105d062dd.yml",
    "mode": "100644"
  }
]

需要筛选出所有type等于"blob"的条目,并将每个条目的id和name整理为嵌套数组结构,期望输出如下:

[
  [ "9a884faee51213bd0fd9b5e97ad5fd0c54e92d8d", "75193f9f-836a-47ba-b425-b00bca0806ea.yml" ],
  [ "1f13b33dee8aa81516935ce476126116b5416b40", "117f2ace-70a3-42a7-8018-aa1105d062dd.yml" ]
]

我尝试使用表达式 $[?(@.type == "blob")][id,name],但得到的是扁平化的结果:

[
  "9a884faee51213bd0fd9b5e97ad5fd0c54e92d8d",
  "75193f9f-836a-47ba-b425-b00bca0806ea.yml",
  "1f13b33dee8aa81516935ce476126116b5416b40",
  "117f2ace-70a3-42a7-8018-aa1105d062dd.yml"
]

请问如何用JSONPath-Plus实现预期需求?


解决方案

使用JSONPath-Plus的投影语法,对每个匹配的blob对象单独生成包含id和name的子数组,表达式如下:

$[?(@.type == "blob")].([@.id, @.name])

原理说明

  • 原表达式$[?(@.type == "blob")][id,name]的逻辑是:先筛选出所有type为blob的对象,然后提取这些对象的id和name字段,最终将所有字段值平铺到一个一维数组中。
  • 新表达式中,.([@.id, @.name])部分会对每个筛选出的对象执行投影操作,将当前对象的id和name组合成一个子数组,最终结果自然就是二维数组结构,与预期输出一致。

运行结果

执行上述表达式后,输出结果与期望完全匹配:

[
  [ "9a884faee51213bd0fd9b5e97ad5fd0c54e92d8d", "75193f9f-836a-47ba-b425-b00bca0806ea.yml" ],
  [ "1f13b33dee8aa81516935ce476126116b5416b40", "117f2ace-70a3-42a7-8018-aa1105d062dd.yml" ]
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:42:25