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

通过curl发起GitHub GraphQL请求报JSON解析错误,如何解决?

GitHub GraphQL API通过curl请求报错的问题分析与解决

我来帮你分析下这个问题哈!你遇到的情况是:在GitHub GraphQL Explorer里能正常运行的查询,用curl命令发送请求时却收到了"Problems parsing JSON"的错误响应,对吧?

问题根源

GitHub的GraphQL API要求POST请求的请求体必须是标准JSON格式,而且这个JSON里需要包含query字段,用来存放你的GraphQL查询语句。但你当前的curl命令只是直接把查询文本作为POST数据发送,并没有封装成符合要求的JSON结构,服务器自然无法解析。

另外还有个小细节:你没有显式设置Content-Type: application/json请求头,虽然有些情况下curl会自动推断,但显式设置能避免很多潜在的格式识别问题。

解决方法

这里给你两种可行的解决方式:

方法一:直接构造JSON请求体

把查询语句封装到包含query字段的JSON字符串里,用单引号包裹整个JSON避免shell转义问题:

curl -H "Authorization: bearer YOUR_TOKEN" -H "Content-Type: application/json" -X POST -d '{"query": "query { __schema { types { name kind description fields { name } } } }"}' https://api.github.com/graphql

记得把YOUR_TOKEN替换成你的实际GitHub访问令牌。

方法二:从文件读取查询并构造JSON

如果你的查询语句较长,存在文件里更方便,可以用jq工具来构造合法的JSON:

curl -H "Authorization: bearer YOUR_TOKEN" -H "Content-Type: application/json" -X POST -d "$(jq -n --arg query "$(cat GraphQL_query.graphql)" '{query: $query}')" https://api.github.com/graphql

如果你的环境没有jq,也可以用sed转义查询里的双引号后手动拼接JSON:

curl -H "Authorization: bearer YOUR_TOKEN" -H "Content-Type: application/json" -X POST -d "{\"query\": \"$(cat GraphQL_query.graphql | sed 's/"/\\"/g')\"}" https://api.github.com/graphql

这样修改后,curl发送的就是符合GitHub GraphQL API要求的请求了,应该就能正常拿到响应啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:27:45