如何让FastAPI的GET请求正确接收JSON格式查询参数?
解决FastAPI GET接口接收JSON查询参数的requests请求报错问题
问题原因
FastAPI接口要求q参数是合法的JSON格式字符串,但直接用requests传递字典类型参数时,requests会自动将字典拆解为q[key]=value这种键值对形式,并非FastAPI所需的完整JSON字符串,因此触发Invalid JSON错误。而浏览器中能正常运行,是因为你手动输入了转义后的标准JSON字符串作为查询参数值。
正确请求方式
先将JSON对象序列化为标准JSON字符串,再将该字符串作为q参数的值传递给接口。
代码示例
服务端代码(确认正确写法)
from fastapi import FastAPI, Query, Json app = FastAPI() @app.get("/items/") async def read_items(q: Json[dict] = Query(..., description="JSON格式的查询参数")): return {"received_query": q}
客户端requests代码
import requests import json # 定义要传递的JSON数据 payload = {"product": "apple", "count": 5, "tags": ["fresh", "organic"]} # 将数据序列化为标准JSON字符串 json_param = json.dumps(payload) # 发送GET请求,把JSON字符串作为q参数的值 response = requests.get( "http://localhost:8000/items/", params={"q": json_param} ) print(response.json())
注意事项
- 必须使用
json.dumps()生成标准JSON字符串,避免手动拼接导致的格式错误(比如引号未转义、结构不完整)。 - 不要直接将字典传入
params参数,否则requests会自动编码为多键值对,无法被FastAPI解析为JSON。
内容的提问来源于stack exchange,提问作者user11634
相关产品推荐
相关产品推荐

