如何用yq更新YAML中JSON字符串字段并保留格式化输出
多文档YAML中带格式JSON字段的更新与格式化方案
问题背景
存在一个多文档结构的sample.yaml文件,其中**action值为"want-to-update"**的文档内,foo字段是一个带有换行和缩进的格式化JSON字符串。需要将该JSON里的a字段值从"actual A"修改为"updated A",且处理后要保留JSON的换行缩进格式,避免被压缩成单行。
解决命令
使用mikefarah/yq(v4及以上版本)结合JSON格式化能力,执行以下命令:
预览修改结果(不改动原文件)
yq e 'select(.action == "want-to-update") | .foo = (.foo | fromjson | .a = "updated A" | tojson | @json)' sample.yaml
原地修改原文件
yq -i e 'select(.action == "want-to-update") | .foo = (.foo | fromjson | .a = "updated A" | tojson | @json)' sample.yaml
命令拆解
select(.action == "want-to-update"):精准筛选出需要处理的目标YAML文档.foo | fromjson:把foo字段的JSON字符串解析为可操作的JSON对象.a = "updated A":修改JSON对象中a字段的对应值tojson | @json:先将修改后的JSON对象转回字符串,再通过@json修饰符强制保留格式化的换行与缩进,避免被压缩
内容的提问来源于stack exchange,提问作者Aswin Sekar
相关产品推荐
相关产品推荐

