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

GitHub Actions提交消息字符转义问题及处理方法咨询

解决GitHub Action中提交消息含双引号导致curl JSON格式错误的问题

方法一:使用GitHub Actions内置的toJSON过滤器(推荐)

GitHub Actions提供toJSON上下文过滤器,能自动将字符串转义为合法的JSON格式,无需手动处理特殊字符。直接在curl命令中使用即可:

curl -H 'Content-Type:application/json' -d '{ "commit": ${{ toJSON(github.event.head_commit.message) }}, ...}'

当提交消息包含双引号(如feat(#7): replace "FAQ" by "Help Center")时,toJSON会自动将双引号转义为\",生成的JSON结构完全合法,不会触发语法错误。

方法二:通过Shell变量中转后写入环境变量

如果需要将转义后的提交消息存入环境变量,避免GitHub直接替换上下文变量时破坏脚本结构,可先将上下文变量赋值给Shell变量,再进行转义处理:

- run: |
    # 先将上下文变量赋值给Shell变量,用双引号包裹避免特殊字符导致语法错误
    COMMIT_MSG="${{ github.event.head_commit.message }}"
    # 转义双引号
    ESCAPED_MSG=$(printf '%s' "$COMMIT_MSG" | sed 's/"/\\"/g')
    # 写入环境变量
    echo "GITHUB_COMMIT=$ESCAPED_MSG" >> $GITHUB_ENV

后续使用环境变量时,直接引用${{ env.GITHUB_COMMIT }}即可,此时的内容已经是转义后的合法字符串。

方法三:用jq构造合法的JSON Payload

对于更复杂的JSON结构,使用jq工具构造Payload是最可靠的方式,它会自动处理所有JSON格式要求:

- run: |
    curl -H 'Content-Type:application/json' -d "$(jq -n --arg msg "${{ github.event.head_commit.message }}" '{commit: $msg, key1: "value1", key2: "value2"}')" https://your-webhook-url.com

通过jq的--arg参数将提交消息传入,再构造完整的JSON对象,生成的Payload绝对符合JSON规范,无需担心任何特殊字符问题。


内容的提问来源于stack exchange,提问作者OOM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:39:15