如何解析docker/bake-action输出的非标准JSON格式metadata?
解决docker/bake-action输出非标准JSON无法被jq解析的问题
方法1:用HJSON工具转成标准JSON(推荐)
HJSON原生支持解析无引号键的非标准JSON,能直接转成jq可识别的标准格式:
- 在GitHub Actions工作流中先安装hjson(以npm为例):
- name: Install hjson run: npm install -g hjson - 直接处理输出或本地文件:
# 直接解析action输出 echo "${{ steps.monorepo-build.outputs.metadata }}" | hjson -j | jq '.mykey' # 处理已写入的文件 hjson -j metadata.txt | jq '.mykey'
hjson -j参数的作用就是把非标准的HJSON转成标准JSON,之后jq就能正常解析顶级键mykey了。
方法2:用sed手动补全键的引号(仅适合简单结构)
如果不想额外安装工具,且输出结构简单(只有顶级键缺失引号),可以用sed给键批量添加双引号:
echo "${{ steps.monorepo-build.outputs.metadata }}" | sed -E 's/^([a-zA-Z0-9_]+):/"\1":/g' | jq '.mykey'
注意:这个命令只处理行首的键,要是输出包含嵌套结构,可能会失效,适合临时救急场景。
方法3:调整docker bake配置,输出标准JSON
从源头解决问题,修改你的docker bake配置(比如docker-bake.hcl),确保输出的metadata是标准JSON格式:
比如在bake配置中使用jsonencode函数处理输出内容,或者在执行bake时添加--print参数强制输出标准JSON,替换原有的输出方式。
内容的提问来源于stack exchange,提问作者sc-leeds
相关产品推荐
相关产品推荐

