Python如何解决POST请求Variables需为JSON对象而非递归编码字符串问题
解决POST请求中变量格式错误的问题
你的错误原因是:手动拼接的字符串被当作variables的值传入时,服务器收到的是JSON字符串嵌套的结构(相当于把JSON又编码了一次),而不是它需要的JSON对象。
正确的处理方式
不要手动拼接JSON字符串,而是先构造Python字典,再用json模块将整个请求体转为标准JSON格式:
- 首先构造变量的字典结构
- 将查询语句和变量一起组装成请求体字典
- 用
json.dumps()将请求体转为JSON字符串
示例代码:
import json # 生成变量字典,而非手动拼接字符串 def get_variables(date): return {"date": date, "timezone": "Europe"} # 组装完整的POST请求体 post_payload = { "query": """query Exchange($date: String!, $timezone: String) { getIntervals(date: $date, timezone: $timezone) { date intervals { start end description type code } } }""", "variables": get_variables("2024-05-20") # 传入具体日期 } # 转为符合要求的JSON字符串,用于POST请求 request_body = json.dumps(post_payload)
为什么原来的方法会报错?
你之前的函数返回的是一个JSON格式的字符串,比如当date为"2024-05-20"时,返回值是'{"date":"2024-05-20","timezone":"Europe"}'。如果把这个字符串直接作为variables的值,最终的请求体结构会变成:
{"query": "...", "variables": "{\"date\":\"2024-05-20\",\"timezone\":\"Europe\"}"}
此时variables的值是一个字符串,而非服务器预期的JSON对象,因此触发错误提示。
内容的提问来源于stack exchange,提问作者Amy Finland
相关产品推荐
相关产品推荐

