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

使用jq遍历JSON删除匹配select筛选条件的对象指定字段

问题原因

你写的代码无法实现原地修改的核心原因是:管道操作..|objects|select(...)会把执行上下文切换为匹配到的单个对象,执行del后只会输出这些修改后的独立对象,原JSON的整体结构会完全丢失。

解决方案

最简写法(推荐)

直接把匹配路径传入del即可,会自动保留原结构删除目标字段:

jq 'del(.. | objects | select(.__typename == "MyType").delete_me)' fixture.json

如果需要直接修改源文件,加上-i参数即可:

jq -i 'del(.. | objects | select(.__typename == "MyType").delete_me)' fixture.json

通用复杂场景写法

如果后续还有其他字段修改逻辑,可以用walk函数递归遍历所有节点处理:

jq 'walk(
  if type == "object" and .__typename == "MyType" then
    del(.delete_me)
  else
    .
  end
)' fixture.json

walk会遍历JSON的每一个节点,符合判断条件的节点执行修改操作,不符合的原样返回,最终输出完整的修改后结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:00