如何用yq给JSON转YAML添加顶层映射并去除引号?
使用yq实现JSON转YAML的格式调整
原始文件与初始转换结果
原始JSON文件(input.json):
{ "test1": { "POST": "{}", "GET": "{}" }, "test2": { "HEAD": "{}", "GET": "{}" } }
通过命令yq eval -P input.json --output-format=yaml转换为YAML后,得到如下结果:
test1: POST: '{}' GET: '{}' test2: HEAD: '{}' GET: '{}'
需求说明
需要实现两个格式调整目标:
- a) 添加名为
config的顶层映射元素,将原有所有内容嵌套到该元素下; - b) 移除所有值为
'{}'的单引号,将其转为YAML原生的空映射格式{}。
最终期望的YAML格式:
config: test1: POST: {} GET: {} test2: HEAD: {} GET: {}
优雅的yq实现命令
可以通过单条yq命令一次性完成两个需求(基于mikefarah/yq v4版本):
直接从JSON文件转换并调整
yq eval -P '{"config": .} | (.. | select(. == "{}")) = {}' input.json --output-format=yaml
从已转换的YAML文件调整
如果已经有初始转换后的YAML文件(比如output.yaml),可以用:
yq eval '{"config": .} | (.. | select(. == "{}")) = {}' output.yaml
命令解释
{"config": .}:将整个输入的内容作为值,赋值给顶层键config,完成需求a;(.. | select(. == "{}")) = {}:递归遍历所有节点,筛选出值为字符串"{}"的元素,将其替换为YAML空映射{},自动去除单引号,完成需求b;-P参数:启用JSON到YAML的格式化转换,保证输出结构整洁。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

