如何在GitHub Actions的JSON中传递多行字符串并解决意外令牌报错
问题根源
你的报错本质是拼接JSON参数时,未对多行字符串里的特殊字符做完整的JSON合规转义,导致生成的JSON格式断裂,解析时触发意外令牌错误。具体问题有三个:
- 手动替换仅处理了换行、百分号,未处理双引号、反斜杠等JSON要求必须转义的字符
- 使用了GitHub官方已废弃的
::set-output语法,输出值传递过程中可能出现不可预期的格式问题 - 手动拼接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
相关产品推荐
相关产品推荐

