有效的 GitHub API v4 查询不断返回错误"Problems parsing JSON"



下面是对 GitHub api v4 的 cURL 查询示例,该查询不断返回错误:

curl -H "Authorization: bearer token" -X POST -d " 
{ 
"query": "query { repositoryOwner(login: "brianzelip") { id } }" 
} 
" https://api.github.com/graphql

返回的错误:

{
"message": "Problems parsing JSON",
"documentation_url": "https://developer.github.com/v3"
}

为什么我总是收到此错误?


根据 GH api v4 文档中关于形成查询调用的内容,上述 cURL 命令是有效的。以下是文档所说的,它支持我声称上述 cURL 命令有效的说法:

curl -H "Authorization: bearer token" -X POST -d " 
{ 
"query": "query { viewer { login }}" 
} 
" https://api.github.com/graphql

注意:"query"的字符串值必须转义换行符或 架构将无法正确分析它。对于开机自检主体,请使用外部 双引号和转义的内部双引号。

当我在 GitHub GraphQL API 资源管理器中输入上述查询时,我得到了预期的结果。对于 GH GraphQL 资源管理器,上述 cURL 命令的格式如下所示:

{
repositoryOwner(login: "brianzelip") {
id
}
}

您必须转义 JSON 字段中query嵌套的双引号,您的实际正文将是:

{
"query": "query { repositoryOwner(login: "brianzelip") { id } }"
}

因此,请将"brianzelip"替换为\"brianzelip\"

curl -H "Authorization: bearer token" -d " 
{ 
"query": "query { repositoryOwner(login: \"brianzelip\") { id } }" 
} 
" https://api.github.com/graphql

您也可以使用单引号代替双引号来包装正文:

curl -H "Authorization: bearer token" -d '
{
"query": "query { repositoryOwner(login: "brianzelip") { id } }"
}
' https://api.github.com/graphql

你也可以使用 heredoc :

curl -H "Authorization: bearer token" -d @- https://api.github.com/graphql <<EOF
{
"query": "query { repositoryOwner(login: "brianzelip") { id } }"
}
EOF

最新更新