GitHub Action自动创建带表格Issue格式异常求助
解决GitHub Action创建带表格Issue时换行未转义的问题
问题根源
你手动拼接JSON字符串时,表格里的原始换行直接被写入了JSON结构中,而JSON要求字符串内的换行必须转义为\n。另外tr '\n' '\\n'无法解决问题,因为tr只能替换单个字符,没法将换行转换成\n(这是两个字符的组合),导致提交的JSON格式无效,GitHub API无法正确解析表格的换行格式。
解决方案
方案一:用jq自动处理JSON转义(推荐)
jq是专门处理JSON的工具,能自动帮你转义字符串里的换行和特殊字符,避免手动拼接的错误。修改后的Action代码如下:
- name: Create Issue if: steps.check_issue.outputs.issue_exists == 'false' run: | jq -n \ --arg title "Titolo ${{ steps.check_repo.outputs.code }}" \ --arg body "${{ steps.check_repo.outputs.table }}" \ '{title: $title, body: $body}' | curl -X POST -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Content-Type: application/json" \ -d @- https://api.github.com/repos/${GITHUB_REPOSITORY}/issues
--arg参数会自动将表格内容里的换行转义为JSON要求的\n@-让curl从标准输入读取jq生成的正确JSON内容- 加上
Content-Type: application/json头,确保GitHub API正确解析请求体
方案二:用sed手动转义特殊字符
如果不想用jq,可以用sed替换换行和双引号,手动构建合法的JSON:
- name: Create Issue if: steps.check_issue.outputs.issue_exists == 'false' run: | table_content="${{ steps.check_repo.outputs.table }}" # 转义双引号和换行符,适配JSON格式 escaped_body=$(printf '%s' "$table_content" | sed -e 's/"/\\"/g' -e 's/\n/\\n/g') # 用here-doc构建JSON字符串 issue_body=$(cat <<EOF { "title": "Titolo ${{ steps.check_repo.outputs.code }}", "body": "$escaped_body" } EOF ) curl -X POST -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Content-Type: application/json" \ -d "$issue_body" https://api.github.com/repos/${GITHUB_REPOSITORY}/issues
sed -e 's/"/\\"/g'转义表格里的双引号,避免破坏JSON结构sed -e 's/\n/\\n/g'将原始换行替换为JSON认可的转义换行符
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

