Python调用GraphQL API GET请求出现JSONDecodeError报错如何解决?
错误原因
- 你直接发空GET请求到GraphQL接口,返回的是GraphQL可视化调试页面的HTML内容,根本不是JSON格式,所以触发JSON解析报错
- 调用GraphQL接口必须在请求中指定对应的查询语句,明确你要获取的字段
- 就算请求成功,GraphQL的返回结构也不是直接的数组,外层有
data字段包裹,不能直接用json_data[0]取值
修复后可运行代码
import requests def get_quote(): # 构造GraphQL查询语句,指定要获取的语录内容和作者字段 graphql_query = """ query { getAllQuotes { quote author } } """ # GET请求需要把查询语句作为query参数传递 params = {"query": graphql_query} response = requests.get( 'https://demotivation-quotes-api.herokuapp.com/graphql', params=params ) # 直接调用requests内置的json解析方法即可,不需要手动导入json模块处理 json_data = response.json() # 按GraphQL返回结构取第一条语录拼接 first_quote = json_data['data']['getAllQuotes'][0] return f"{first_quote['quote']} - {first_quote['author']}" if __name__ == "__main__": quote = get_quote() print(quote)
补充优化建议
如果不需要拉取全量语录,你也可以调整GraphQL查询语句为随机单条查询,减少数据传输量,查询效率更高。
内容的提问来源于stack exchange,提问作者youturnskyw
相关产品推荐
相关产品推荐

