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

使用Python Requests处理嵌套字典:Flask API查询技术问询

正确用Python Requests传递嵌套字典参数到Flask API

嘿,恭喜你搞定Flask应用部署和API搭建!关于传递嵌套字典参数的问题,我给你两种靠谱的解决方案,看你的API接收逻辑来选:

方法1:让Requests自动序列化嵌套参数(推荐)

Requests的params参数支持自动处理嵌套字典,会把它转换成符合HTTP查询参数规范的格式(比如lat[gt]=39&lat[lt]=50),Flask这边也能轻松解析。

代码示例:

import requests

# 直接构造包含嵌套结构的参数字典
query_params = {
    'state': 'PA',
    'lat': {
        'gt': 39,
        'lt': 50
    }
}

# 把参数传给params,Requests会自动处理编码和格式
response = requests.get('http://www.asosquery.com/api/v1/stations', params=query_params)

# 直接用response.json()解析返回的JSON,比手动json.loads更简洁
content = response.json()

在你的Flask API里,可以这样获取参数:

from flask import request

@app.route('/api/v1/stations')
def get_stations():
    state = request.args.get('state')
    # 获取嵌套的lat条件,to_dict(flat=False)会保留嵌套结构
    lat_filters = request.args.to_dict(flat=False)['lat']
    # 或者单独取每个子参数
    lat_gt = request.args.get('lat[gt]')
    lat_lt = request.args.get('lat[lt]')
    # 后续逻辑...

方法2:手动将嵌套字典序列化为JSON字符串

如果你的API期望接收JSON格式的字符串参数(比如lat={"gt":39,"lt":50}),可以手动把嵌套字典转成JSON字符串再传递:

代码示例:

import requests
import json

query_params = {
    'state': 'PA',
    # 把嵌套字典转成JSON字符串
    'lat': json.dumps({'gt': 39, 'lt': 50})
}

response = requests.get('http://www.asosquery.com/api/v1/stations', params=query_params)
content = response.json()

对应的Flask端解析:

from flask import request
import json

@app.route('/api/v1/stations')
def get_stations():
    lat_str = request.args.get('lat')
    lat_filters = json.loads(lat_str)
    # 后续逻辑...

为什么你原来的写法有问题?

你之前直接把字典字符串拼在URL里,会遇到URL编码不规范的问题,而且Flask很难正确解析这种格式的参数,用上面两种方法都比手动拼接URL要可靠得多~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:03:46