如何用jq删除JSON列表中enabled为false的条目?
使用jq删除JSON指定条目并保留原结构
要在保留完整JSON结构的前提下,删除sig数组中enabled值为false的条目,你可以用jq的更新操作符来修改目标字段,而非直接筛选条目。
核心命令
jq '.app.sig |= map(select(.enabled == true))' input.json
命令解释
.app.sig |= ...:对app下的sig字段执行后续操作,并将结果赋值回原字段,确保整个JSON结构完整保留。map(select(.enabled == true)):遍历sig数组,仅保留enabled值为true的元素。
示例执行结果
输入你提供的JSON后,输出将是:
{ "app": { "id": "11111111", "name": "test", "general": { "allow": "sdasdass" }, "settings": { "max": "8192" }, "sig": [ { "enabled": true, "Staging": false, "sId": "200101556" }, { "enabled": true, "Staging": false, "sId": "200012002" } ], "version": "v1" } }
额外提示
- 如果要直接修改原文件,可使用
sponge工具(需先安装moreutils包):jq '.app.sig |= map(select(.enabled == true))' input.json | sponge input.json - 也可反向筛选(排除
enabled为false的条目),效果完全一致:jq '.app.sig |= map(select(.enabled != false))' input.json
内容的提问来源于stack exchange,提问作者bdhdev
相关产品推荐
相关产品推荐

