使用mikefarah/yq生成JSON时为何得到重复输出?
解决yq创建JSON时重复输出的问题
环境信息
- yq版本:
yq (https://github.com/mikefarah/yq/) version v4.44.3
问题重现
执行以下命令创建JSON结构:
yq -n -o=json '.a = 1,.b.c = 16 , .b.d = 12'
得到重复的两份JSON输出:
{ "a": 1, "b": { "c": 16, "d": 12 } } { "a": 1, "b": { "c": 16, "d": 12 } }
期望仅输出一份正确的JSON结构:
{ "a": 1, "b": { "c": 16, "d": 12 } }
问题原因
命令中使用逗号分隔多个赋值表达式,在yq v4的语法规则里,逗号会触发每个表达式单独输出结果,因此最终得到多次重复的JSON结构。
解决方案
有两种方式可以实现单次输出:
方式1:用大括号包裹,分号分隔赋值操作
将所有赋值逻辑放在大括号内,用分号分隔每个操作,这样只会输出最终的完整结构:
yq -n -o=json '{.a = 1; .b.c = 16; .b.d = 12}'
方式2:用管道符连接赋值操作
通过管道符|串联多个赋值步骤,最终输出一次处理后的结果:
yq -n -o=json '.a = 1 | .b.c = 16 | .b.d = 12'
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

