使用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
相关产品推荐
相关产品推荐

