如何在 FastAPI 中为上传的 JSON 文件自动添加索引 ID

冬静吖_7288

冬静吖_7288

2026-05-20

298人浏览

原创

如何在 FastAPI 中为上传的 JSON 文件自动添加索引 ID

本文介绍如何在 fastapi 应用中接收用户上传的 json 文件,并为其数组元素动态添加从 1 开始的整数索引键,转换为以序号为键的字典结构,便于后续按索引进行独立计算与结果展示。

本文介绍如何在 fastapi 应用中接收用户上传的 json 文件,并为其数组元素动态添加从 1 开始的整数索引键,转换为以序号为键的字典结构,便于后续按索引进行独立计算与结果展示。

在 FastAPI 中处理上传的 JSON 文件时,原始数据通常是一个列表(如 [{"B4": 14, "B5": 12}, ...]),但若需按“第1组”“第2组”等语义化方式访问每条记录(例如分别计算 B4 + B5 或做归一化),将列表转为以递增整数为键的字典(如 {"1": {...}, "2": {...}})是更直观、易索引的设计。

以下是一个完整、可直接集成到 FastAPI 服务中的实现方案:

JSON Toolkit
JSON Toolkit

JSON文件多功能工具。支持格式化、验证、压缩、键排序及点记法路径查询。零依赖。

下载

✅ 步骤说明

  1. 接收用户通过 UploadFile 上传的 JSON 文件;
  2. 解析 JSON 内容,确保其为合法列表;
  3. 使用 enumerate(..., start=1) 为每个对象分配从 1 开始的字符串键(JSON 键必须为字符串);
  4. 构建新字典并序列化为 JSON 响应(或保存为文件)。

? 示例代码(FastAPI 路由)

from fastapi import FastAPI, UploadFile, File, HTTPException
import json
from typing import Dict, Any

app = FastAPI()

@app.post("/add-index-id/")
async def add_index_id(file: UploadFile = File(...)):
    # 验证文件类型
    if not file.filename.endswith(".json"):
        raise HTTPException(400, "仅支持上传 .json 文件")

    try:
        # 读取并解析 JSON
        content = await file.read()
        data = json.loads(content)

        # 确保输入为 list 类型
        if not isinstance(data, list):
            raise HTTPException(400, "JSON 根节点必须是数组(list)")

        # 构建带索引键的字典:{"1": {...}, "2": {...}, ...}
        indexed_data: Dict[str, Any] = {
            str(idx): item for idx, item in enumerate(data, start=1)
        }

        return {"status": "success", "indexed_data": indexed_data}

    except json.JSONDecodeError:
        raise HTTPException(400, "上传的文件不是有效的 JSON")
    except Exception as e:
        raise HTTPException(500, f"处理失败:{str(e)}")

? 注意事项

  • JSON 标准不支持数字作为对象键(如 1: {...} 是非法语法),因此索引必须转为字符串(如 "1": {...}),上述代码已自动处理;
  • 若需持久化保存(如写入磁盘),可在路由内使用 with open("updated.json", "w") as f: json.dump(indexed_data, f, indent=2);
  • 对于大文件,建议流式解析或添加内存限制,避免 await file.read() 导致 OOM;
  • 可进一步扩展:添加校验逻辑(如确保每个 item 包含 "B4" 和 "B5" 字段)、支持嵌套结构或返回计算结果(如 "result_1": {"sum": 26, "ratio": 1.166})。

该方案轻量、健壮,完美适配 FastAPI 的异步文件处理范式,让索引化 JSON 成为可复用的数据预处理环节。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

js json

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2335

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3822

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1276

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

4439

7

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

119

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

594

18

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

2026.05.09

756

23

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

2026.06.16

639

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习