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

如何用JQ过滤JSON数组并保留原JSON结构?

JQ过滤数组并保留外层JSON结构的解决方案

你当前的命令.policies[] | select(.isEnabled == false)会把policies数组的元素逐个展开输出,自然丢失了原有的数组和外层结构。要保留完整JSON结构,你需要直接更新policies字段的值为过滤后的数组,而不是展开数组元素。

推荐两种简洁的写法:

方法1:使用更新赋值操作符 |= + map 函数

cat myjson.json | jq '.policies |= map(select(.isEnabled == false))'

|= 会直接修改原对象的policies字段,map函数遍历数组每个元素,只保留符合条件的项,这种写法更高效简洁。

方法2:重新赋值数组

cat myjson.json | jq '.policies = [.policies[] | select(.isEnabled == false)]'

这个写法先展开数组过滤元素,再把结果重新包装成数组赋值给policies字段,效果和方法1一致。

示例验证

假设你的原JSON数据是:

{
  "name": "系统策略集合",
  "policies": [
    {"id": 1, "name": "策略A", "isEnabled": true},
    {"id": 2, "name": "策略B", "isEnabled": false},
    {"id": 3, "name": "策略C", "isEnabled": false}
  ]
}

执行上述命令后,输出会保留外层结构,同时只包含isEnabled为false的策略:

{
  "name": "系统策略集合",
  "policies": [
    {"id": 2, "name": "策略B", "isEnabled": false},
    {"id": 3, "name": "策略C", "isEnabled": false}
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:33:21