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

Python如何解决POST请求Variables需为JSON对象而非递归编码字符串问题

解决POST请求中变量格式错误的问题

你的错误原因是:手动拼接的字符串被当作variables的值传入时,服务器收到的是JSON字符串嵌套的结构(相当于把JSON又编码了一次),而不是它需要的JSON对象。

正确的处理方式

不要手动拼接JSON字符串,而是先构造Python字典,再用json模块将整个请求体转为标准JSON格式:

  1. 首先构造变量的字典结构
  2. 将查询语句和变量一起组装成请求体字典
  3. 用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:22:16