You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub工作流中安全写入含特殊字符的JSON到文件?

解决GitHub Actions中JSON含特殊字符的处理问题

问题原因

你当前的echo '${{ steps.release.outputs.data }}'命令失败,是因为JSON内容中的单引号会提前闭合shell的单引号字符串,触发语法解析错误。

方案一:安全写入文件(保留原流程)

使用bash的单引号here-doc,确保所有特殊字符(单引号、$、反引号等)都被原封不动写入文件,完全规避shell解析问题:

- name: Get Information from Release
  run: |
    cat <<'EOF' > release.json
    ${{ steps.release.outputs.data }}
    EOF
    jq -r '.assets[].browser_download_url' release.json > assets.txt
    jq -r '.body' release.json > changelog.txt

<<'EOF'会将中间内容视为纯字面量,shell不会解析任何特殊符号,完美解决引号冲突。

方案二:无需中间文件的最优方案

直接用bash的单引号here-string将JSON内容传给jq,省去写入文件的IO操作,效率更高:

- name: Get Information from Release
  run: |
    jq -r '.assets[].browser_download_url' <<<'${{ steps.release.outputs.data }}' > assets.txt
    jq -r '.body' <<<'${{ steps.release.outputs.data }}' > changelog.txt

<<<'...'是单引号包裹的here-string,会把内容当作纯文本传递给jq,彻底避免shell对特殊字符的解析。

进阶优化(大JSON场景)

如果JSON体积较大,不想重复解析,可以先将内容存入变量,再多次复用:

- name: Get Information from Release
  run: |
    release_data=$(cat <<<'${{ steps.release.outputs.data }}')
    printf '%s' "$release_data" | jq -r '.assets[].browser_download_url' > assets.txt
    printf '%s' "$release_data" | jq -r '.body' > changelog.txt

内容的提问来源于stack exchange,提问作者void.pointer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:50:15