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

FastAPI路由返回JSON/字典格式异常求助:CSV学生数据查询问题

问题分析与解决

错误原因

你遇到的错误核心是FastAPI路由定义与函数参数不匹配:

  • 路由/student/{data_id}声明了路径参数data_id,但read_item函数却要求data_json_output作为必填查询参数,导致访问时提示该字段缺失。
  • 本地控制台的input逻辑在FastAPI服务中无效,服务是通过HTTP请求接收ID参数,而非控制台输入。
  • 手动用json.dumps转换JSON完全没必要,FastAPI会自动将Python字典序列化为JSON响应。

修正后的代码

import pandas as pd
from fastapi import FastAPI, HTTPException
import uvicorn

# 全局加载CSV数据,小数据量下无需每次请求读取
df_data_csv = pd.read_csv("data.csv")
data_dict = df_data_csv.to_dict(orient='index')

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Test"}

# 正确绑定路径参数与函数参数
@app.get("/student/{data_id}")
def read_item(data_id: int):
    # 处理ID不存在的情况
    if data_id not in data_dict:
        raise HTTPException(status_code=404, detail="学生ID不存在")
    # 返回字典,FastAPI自动转为JSON格式
    return data_dict[data_id]

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8080)

关键修改说明

  • 路由函数read_item接收路径参数data_id: int,与路由定义的{data_id}完全对应。
  • 新增ID不存在的错误处理,返回标准404状态码和提示信息。
  • 移除了无用的requests、json模块导入,以及本地控制台输入的冗余代码。
  • 直接返回Python字典,FastAPI自动完成JSON序列化,完全符合你期望的返回格式。

测试效果

访问http://localhost:8080/student/0时,会直接返回:

{"Name": "A", "Height": 4, "Weight": 60, "Grade": "J"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:30:33