如何在Flask中从请求加载JSON文件并读取参数?
Flask后端加载上传的JSON文件并获取参数的解决方法
我来帮你搞定这个问题~你之前的代码之所以拿不到JSON内容,核心问题是没有正确处理上传的文件对象:request.files['data']返回的是Flask的FileStorage对象,不是JSON字符串,直接传给json.loads()肯定会出错。
正确处理上传JSON文件的代码
下面是修复后的完整代码,包含错误处理,更健壮:
from flask import Flask, request import json app = Flask(__name__) @app.route('/process', methods=['GET', 'POST']) def post_data(): if request.method == "POST": # 第一步:检查是否存在上传的文件 if 'data' not in request.files: return "未上传任何文件", 400 file_obj = request.files['data'] # 第二步:检查文件名是否为空(用户可能没选文件就提交) if file_obj.filename == '': return "未选择要上传的文件", 400 # 第三步:读取文件内容并解析JSON try: # 读取文件字节内容,解码为UTF-8字符串 file_content = file_obj.read().decode('utf-8') posted_data = json.loads(file_content) # 获取JSON中的参数 number = posted_data.get('number') weather = posted_data.get('weather') print(f"获取到的参数:number={number}, weather={weather}") return "处理成功", 200 except json.JSONDecodeError: return "上传的文件不是有效的JSON格式", 400 except Exception as e: return f"处理出错:{str(e)}", 500 # GET请求返回提示 return "请使用POST方法上传JSON文件", 405
关键步骤说明
- 先校验文件是否存在、是否被正确选择,避免空文件或无文件的异常
- 必须通过
file_obj.read()读取文件的字节内容,再解码为字符串,才能传给json.loads()解析 - 用
try-except捕获JSON解析错误和其他异常,让接口返回更清晰的错误信息
补充:如果客户端直接发送JSON请求体(不是上传文件)
如果你的前端是把JSON数据放在请求体里(Content-Type设为application/json),而不是上传文件,代码可以更简洁:
@app.route('/process', methods=['POST']) def post_data(): try: posted_data = request.get_json() if not posted_data: return "未接收到JSON数据", 400 number = posted_data.get('number') weather = posted_data.get('weather') print(f"获取到的参数:number={number}, weather={weather}") return "处理成功", 200 except Exception as e: return f"处理出错:{str(e)}", 500
内容的提问来源于stack exchange,提问作者duolanierduone
相关产品推荐
相关产品推荐

