如何用jq基于双条件精准替换JSON中指定插件的字段值?
解决方法
你的问题出在使用 .plugins[] 时会遍历所有插件,导致筛选和修改操作都错误作用到了所有插件上。要实现精准的双条件筛选替换,需要分层定位目标对象:先找到指定服务,再在该服务的插件列表中定位到目标插件进行修改。
正确的jq命令如下:
cat file.json | jq '.services |= map( if .name == "check-api" then .plugins |= map( if .name == "oauth2" then .config.provision_key = "xxxxxx" else . end ) else . end )'
命令说明:
- 外层通过
map遍历services数组,用if .name == "check-api"精准定位到目标服务 - 对目标服务的
plugins数组再次执行map遍历,用if .name == "oauth2"定位到要修改的插件 - 仅修改该插件的
.config.provision_key字段,其余插件和服务保持原结构不变
这样就能完成精准替换,不会误修改其他插件的字段。
内容的提问来源于stack exchange,提问作者atmoss
相关产品推荐
相关产品推荐

