Python后端(FastAPI+Motor)导入JSON模拟数据的其他方法
导入JSON模拟数据的几种替代方法
你可以不用修改JSON文件后缀,直接通过以下几种方式读取并导入模拟数据:
1. 使用Python标准库json直接读取文件
这是最直接的方式,无需修改原JSON文件,保持数据的独立格式:
import json from pathlib import Path # 基于当前文件路径定位mockup.json(假设文件在app/data目录下) json_file_path = Path(__file__).parent / "data" / "mockup.json" # 读取并加载JSON数据 with open(json_file_path, "r", encoding="utf-8") as f: mock_data = json.load(f)
这种方式的优势是数据和代码分离,后续修改模拟数据只需编辑JSON文件,无需改动Python代码。
2. 封装为FastAPI依赖项复用
如果多个路由需要用到这份模拟数据,可以把读取逻辑封装成FastAPI依赖项,方便统一管理:
from fastapi import Depends import json from pathlib import Path def get_mock_data(): json_file_path = Path(__file__).parent / "data" / "mockup.json" with open(json_file_path, "r", encoding="utf-8") as f: return json.load(f) # 在路由中调用依赖项 @app.get("/api/mock-data") async def retrieve_mock_data(data=Depends(get_mock_data)): return data
3. 异步场景下使用aiofiles读取
因为你用到了Motor(MongoDB异步驱动),可以配合aiofiles实现异步读取,保持代码风格一致:
首先安装aiofiles:
pip install aiofiles
然后编写异步读取逻辑:
from fastapi import Depends import aiofiles import json from pathlib import Path async def get_mock_data_async(): json_file_path = Path(__file__).parent / "data" / "mockup.json" async with aiofiles.open(json_file_path, "r", encoding="utf-8") as f: content = await f.read() return json.loads(content) # 异步路由中使用 @app.get("/api/mock-data/async") async def retrieve_mock_data_async(data=Depends(get_mock_data_async)): return data
4. 临时小数据:直接嵌入JSON字符串(不推荐)
如果模拟数据量很小且无需频繁修改,可以直接把JSON内容作为字符串嵌入代码,用json.loads解析:
import json mock_json_content = ''' [ { "a": "hello", "b1": ["a","b","c"] }, { "a": "hello", "b1": ["a","b","c"] } ] ''' mock_data = json.loads(mock_json_content)
这种方式不适合需要维护的数据,仅适用于临时测试场景。
内容的提问来源于stack exchange,提问作者Alex Abades Grimes
相关产品推荐
相关产品推荐

