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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:11:07