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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:17:22