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

使用jq筛选数组对象后如何正确重建数组?

解决jq筛选数组后重建数组的问题

我来帮你搞定这个jq的问题~你遇到的核心问题是先把数组展开成了对象流,导致后续没法直接用map重建数组,下面给你两种简单的解决方案:

方案1:直接在数组上使用map(推荐)

不要先通过.[]展开数组,而是直接用map函数对整个数组进行筛选操作,这样全程保持数组上下文,结果自然就是数组格式。

正确命令:

jq 'map(select(.path | test("a/b") | not))'

针对你的输入数组:

[ { "path": "a/b" }, { "path": "a/b/c" }, { "path": "a/c" }, { "path": "a/d" } ]

执行后会输出:

[
  {
    "path": "a/c"
  },
  {
    "path": "a/d"
  }
]

方案2:用数组包裹筛选后的对象流

如果你习惯先展开筛选,也可以把整个筛选操作放在数组括号[]里,这样jq会把对象流重新收集成数组:

命令如下:

jq '[.[] | select(.path | test("a/b") | not)]'

这个命令的效果和方案1完全一致,只是写法不同。

为什么你之前的方法不行?

你先用.[]把数组拆成了单个对象的流(每个对象单独输出),这时候再管道到map(.),map函数是作用在数组上的,但此时上下文已经是单个对象,不是数组了,所以会出现异常输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:25:53