如何用Go版yq遍历复杂YAML并提取信息转换为JSON?
用Go版yq一步实现目标JSON转换
不用写Bash循环遍历,直接用Go版yq的内置函数就能完成需求,核心命令如下:
yq -o json '.content.images | map({( .image ): .layers | map(.digest | sub("^sha256:"; ""))}) | add' your-file.yaml
命令拆解:
.content.images:定位到YAML中存储镜像信息的数组map({( .image ): ...}):遍历数组中的每个镜像对象,将.image字段的值作为输出对象的键.layers | map(.digest | sub("^sha256:"; "")):处理每个镜像的layers数组,提取digest并移除开头的sha256:前缀,生成纯哈希值列表add:将map生成的多个键值对对象合并为一个顶层JSON对象-o json:指定最终输出格式为JSON
示例验证
假设你的YAML内容如下:
content: images: - image: "nginx:latest" layers: - digest: "sha256:a1b2c3d4" - digest: "sha256:e5f6g7h8" - image: "ubuntu:22.04" layers: - digest: "sha256:i9j0k1l2"
执行命令后会输出:
{ "nginx:latest": ["a1b2c3d4", "e5f6g7h8"], "ubuntu:22.04": ["i9j0k1l2"] }
这种方法完全避开了Bash处理复杂嵌套结构的痛点,直接用yq的原生语法完成转换,效率和可靠性更高。
内容的提问来源于stack exchange,提问作者JoyceLee
相关产品推荐
相关产品推荐

