UTILS.
100% 浏览器内运行
🐍

JSON 转 Pydantic 模型

将 JSON 示例转换为 Python Pydantic v2 模型类,并提供 @dataclass 或 TypedDict 输出以及 snake_case 字段别名的开关。

输出

关于此工具

JSON 转 Pydantic 模型工具可将粘贴的 JSON 示例转换为 Python 模型类。Python 和 FastAPI 开发者经常需要从示例 API 响应搭建 Pydantic 模型,而此转换器可在浏览器中即时完成。它解析你的 JSON,递归推断 Python 类型,并为每个对象输出一个类:字符串变为 str,ISO 日期时间字符串变为 datetime,纯日期字符串变为 date,整数变为 int,其他数字变为 float,布尔值变为 bool,数组变为 List[T],嵌套对象则各自生成以 PascalCase 命名的模型类。

所有解析和生成都用 JSON.parse 和纯 JavaScript 在本地完成,因此你粘贴的任何内容都不会离开你的机器。子类会在引用它们的类之前输出(拓扑顺序),头部只导入实际用到的内容——从 pydantic 导入 BaseModel 和 Field,从 typing 导入 Optional / List / Union / Any,相关时导入 datetime / date。始终包含 from __future__ import annotations,这样前向引用无论顺序如何都能正常工作。

某些同级对象中缺失的键,或被视为 null 的键,会变为 Optional[T] = None。输出模式开关可在 Pydantic v2 BaseModel(默认)、标准库 @dataclass 和 typing.TypedDict 之间切换。开启 snake_case 字段可重命名 camelCase 或无效的键,并自动添加 Field(alias="originalKey"),使模型仍能解析原始 JSON。复制代码,或将其下载为 .py 文件。

常见问题

会推断出哪些 Python 类型?
string 变为 str,ISO 日期时间变为 datetime,纯日期变为 date,整数变为 int,非整数数字变为 float,布尔值变为 bool,数组变为 List[T](T 从元素合并而来),对象变为嵌套的 BaseModel 类。null 或缺失的值变为 Optional[T] = None。
我可以改用 dataclass 或 TypedDict 吗?
可以。输出模式开关会输出 Pydantic v2 BaseModel(默认)、带 dataclasses 导入的标准库 @dataclass,或 typing.TypedDict 类。类型推断相同,只有类外壳和导入会改变。
如何处理非标识符或 camelCase 的键?
开启 snake_case 字段后,像 userName 这样的键会变为 user_name 并加上 Field(alias="userName"),使其仍能往返转换。属于 Python 关键字或无效标识符的键总会被加上别名,以保证生成的代码有效。
这些类的顺序正确吗?
正确。嵌套的子类会在使用它们的父类之前声明,并包含 from __future__ import annotations,因此这些模型编译时不会出现前向引用错误。

更多工具