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

如何通过Curl触发带JSON格式字符串输入的GitHub Action工作流

问题

我在GitHub Actions中配置了一个以workflow_dispatch为触发事件的工作流,要求接收JSON格式的字符串输入,对应的YAML配置如下:

name: Json parse test

on:
  workflow_dispatch:
    inputs:
      parameters_json:
        type: string
        required: true

jobs:
  build_and_deploy:
    name: Json parse test
    runs-on: ubuntu-latest
    steps:
      - name: Parse json input
        id: json
        run: |
          echo ${{ fromJson(github.event.inputs.parameters_json).targetPlatform }}

我希望通过Curl请求触发该工作流,网页手动触发正常,但执行以下Curl命令时出现JSON解析错误:

curl -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer " -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos///actions/workflows/json_parse_test.yml/dispatches -d '{"ref":"dev","inputs":{"parameters_json":"{"targetPlatform":"asd","param":45}"}}'

错误信息:

{
  "message": "Problems parsing JSON",
  "documentation_url": "https://docs.github.com/rest/reference/actions#create-a-workflow-dispatch-event"
}

传递普通字符串输入时工作流可正常触发,说明Curl命令本身无问题,请问该如何发送JSON格式的字符串输入解决这个解析问题?

解决方法

问题出在嵌套JSON字符串的引号冲突:你在-d参数里用单引号包裹整个JSON,但内部parameters_json的值又是一个用双引号包裹的JSON,这会导致JSON结构被提前截断,GitHub API无法正确解析。

有两种可行的解决方式:

方式1:转义内部JSON的双引号

把内部JSON字符串里的双引号用反斜杠转义,确保整个JSON结构的完整性:

curl -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer <my token>" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/<owner>/<my repo>/actions/workflows/json_parse_test.yml/dispatches -d '{"ref":"dev","inputs":{"parameters_json":"{\"targetPlatform\":\"asd\",\"param\":45}"}}'

方式2:将JSON内容写入文件,通过文件传递

如果嵌套的JSON结构复杂,转义容易出错,可以把完整的请求体写入一个文件(比如payload.json):

{
  "ref": "dev",
  "inputs": {
    "parameters_json": "{\"targetPlatform\":\"asd\",\"param\":45}"
  }
}

然后用Curl的@参数读取文件发送:

curl -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer <my token>" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/<owner>/<my repo>/actions/workflows/json_parse_test.yml/dispatches -d @payload.json

注意:不管用哪种方式,parameters_json的值本身是一个字符串形式的JSON,所以必须用双引号包裹,内部的双引号要转义,这样GitHub Actions才能用fromJson正确解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:05:19