JSON 转 Pydantic

粘贴 JSON 一键生成 Pydantic v2 BaseModel,可直接用作 FastAPI 的 request / response 模型

在线 JSON 转 Pydantic 工具:自动推断 int / float / bool / str / datetime / list 等类型,嵌套对象与对象数组生成独立模型类(被依赖的子模型排在前面), 字段名统一规范为 snake_case,开启别名后每个字段以 Field(..., alias="原始键") 对齐上游 JSON,值为 null 的字段标注 Optional 并补默认值,import 按需精简不多一行。 全部转换在浏览器本地完成,不上传任何数据。

输入 JSON

生成设置

字段别名 alias

开启后每个字段生成 Field(..., alias="原始键"),并注入 model_config = ConfigDict(populate_by_name=True),两种键名都能赋值

Optional 标注

值为 null 的字段标注 Optional[T] 并补默认值 None,让字段真正可选

datetime 识别

符合 ISO 8601 的字符串(含纯日期)识别为 datetime,关闭后一律按 str

嵌套独立模型

嵌套对象与对象数组生成独立 class(被依赖的子模型在前),关闭后一律用 dict 类型

Pydantic 模型代码

0

模型类

0

字段

0

import 行

输入 JSON 后,这里会显示生成的 Pydantic 模型代码

也可以点击左侧「载入示例」先看看效果

用法提示

  • • FastAPI 即插即用:把生成的类直接用作路径操作的 request / response model,请求体自动完成校验与类型转换,OpenAPI 文档也随之生成。
  • • 校验普通字典:Root.model_validate(obj)(Pydantic v2)可校验任意 dict,失败时抛出 ValidationError 并精确指出字段与原因;model_dump(by_alias=True) 按原始键导出。

#JSON 转 Pydantic 工具说明

Pydantic 是什么?FastAPI 为什么用它?

Pydantic 是 Python 生态最主流的数据校验库:用类型注解声明字段,构造对象时自动完成类型转换与校验,数据不合法就抛出 ValidationError 并精确指出字段与原因。 FastAPI 把 Pydantic 当作地基——路径操作的请求体、响应模型本质都是 Pydantic 模型,参数校验、序列化、交互式 API 文档(OpenAPI / Swagger)全部由模型定义驱动, 所以「JSON 定义接口结构 → 生成 Pydantic 模型」是接入 FastAPI 的第一步。

v1 和 v2 的写法差异

Pydantic v2 用 model_config = ConfigDict(populate_by_name=True) 一行类属性, 取代了 v1 的 class Config: 内嵌类写法;校验核心也换成了 Rust 实现的 pydantic-core,速度提升数倍。 本工具输出的是 v2 写法(BaseModel + ConfigDict + Field),如需 v1,把 ConfigDict 那行改回 class Config: 即可。

alias 什么时候需要?

当上游 JSON 的键不符合 Python 命名规范时——例如 camelCase(userName)、kebab-case(api-version)、含空格(retry count)或撞上关键字(class)—— Python 侧需要一个合法的 snake_case 字段名,序列化解析则靠 alias 对齐原始键,两边互不迁就。 配置 populate_by_name=True 后,模型初始化时传字段名或原始键都能识别。 原始键本身已经是合法 snake_case(如 order_id)时不再生成多余别名,保持代码干净。

Optional 和默认值的坑

  • 字段值为 null 时只能推断成 Optional[Any] = None,无法得知真实类型,建议拿到代码后手动改成 Optional[str] 等更精确的注解。
  • Optional[T] 只是类型层面「允许 None」,Pydantic 默认仍把没有默认值的 Optional 字段当必填——所以本工具会补上 = None 或 Field(None, alias=...) 让它真正可选。
  • 数组里混入 null 时会生成 list[Union[T, None]],等价于「元素可空」;若想整段容错,也可手动放宽为 list[Any]。

和 dataclass 的区别

dataclass(标准库)只是「数据容器」:自动生成 __init__ / __repr__ 等样板代码,不做任何运行时类型校验与转换,字段类型写错不会报错; Pydantic 模型在构造时校验并强制转换类型,还自带 model_validate / model_dump / JSON Schema 导出等接口。 对外要信任校验(API 输入、配置解析)选 Pydantic;纯内部、追求轻量的数据结构用 dataclass 即可——Python 3.12+ 的 dataclass 也能和 Pydantic 混用。

#常见问题 (FAQ)

生成的代码需要安装什么依赖?

只需要 pydantic(v2 系列,pip install pydantic),FastAPI 项目自带无需额外安装;datetime 与 typing 都是 Python 标准库。生成代码可直接粘贴进 models.py 使用。

为什么每个字段都带 Field(..., alias=...)?可以去掉吗?

这是「字段别名 alias」开关的效果:开启后每个字段都以 Field(..., alias="原始键") 对齐上游 JSON,Python 侧保持 snake_case,两种键名经 populate_by_name 配置都能赋值。若原始键本身已是规范 snake_case 且接受直用,可关闭开关得到裸字段声明。

JSON 数据会被上传吗?

不会。JSON 解析、类型推断与代码生成全部在你的浏览器本地完成,不发送任何网络请求,刷新页面后数据自动清空,可以放心粘贴生产环境接口返回值。

相关工具推荐

Spine动画编辑器

专业的Spine动画预览和编辑工具,支持多引擎导出

热门 新品 本地

SQL查询优化器

分析SQL查询并提供优化建议

热门 新品 本地

JVM启动参数配置

可视化配置Java虚拟机启动参数,支持内存、GC、性能等选项

热门 新品 本地

代码片段转换

不同编程语言间代码片段转换(如Python↔JavaScript)

热门 新品 本地

IP地址查询

查询IP地址的地理位置、运营商、ASN等信息,支持IPv4和IPv6

热门 新品 本地

JSON转TypeScript接口

根据JSON数据自动生成TypeScript类型定义

热门 新品 本地

相关教程