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

如何在GitHub Actions的JSON中传递多行字符串并解决意外令牌报错

问题根源

你的报错本质是拼接JSON参数时,未对多行字符串里的特殊字符做完整的JSON合规转义,导致生成的JSON格式断裂,解析时触发意外令牌错误。具体问题有三个:

  1. 手动替换仅处理了换行、百分号,未处理双引号、反斜杠等JSON要求必须转义的字符
  2. 使用了GitHub官方已废弃的::set-output语法,输出值传递过程中可能出现不可预期的格式问题
  3. 手动拼接JSON字符串的容错率极低,只要存在一个未转义的特殊字符就会导致整个JSON失效
修复方案

使用jq工具自动完成字符串的JSON转义,同时替换废弃的输出语法,修改后的工作流配置如下:

steps:
    - uses: actions/checkout@v4
    - name: Get Log
      id: getLog
      run: |
        # 读取test.md内容,自动转义为合法JSON字符串
        ESCAPED_CHANGELOG=$(jq -Rs '.' test.md)
        # 写入官方指定的输出变量文件
        echo "changeLog=$ESCAPED_CHANGELOG" >> $GITHUB_OUTPUT
    - name: Invoke CLI workflow with changelog
      uses: benc-uk/workflow-dispatch@v1
      with:
        workflow: Workflow publish
        token: ${{ secrets.TOKEN }}
        repo: repo/name
        # 直接引用预转义的内容拼接JSON
        inputs: '{ "changeLog": ${{steps.getLog.outputs.changeLog}} }'
说明
  • jq -Rs '.' 文件名会自动将文件内所有内容转为合法的JSON字符串,自动处理换行、双引号、反斜杠、制表符等所有需要转义的特殊字符,无需手动替换
  • 升级actions/checkout到v4是为了适配新版GitHub Actions运行环境,避免兼容性问题
  • 不需要再手动对输出内容做百分号、换行的替换,jq的转义结果已经可以直接在JSON中使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:33:02