在线JSON转Python模型工具
把 JSON 生成 Pydantic 模型或 dataclass、字段保持 snake_case、嵌套模型自动排序到前面
粘 JSON,得到 Pydantic 模型(或普通 dataclass)。本来就是 snake_case 的 key 原样保留;只有非法标识符和 Python 关键字才会加别名。
嵌套模型排在引用它的模型前面——Python 是按顺序解析名字的,被引用的类必须先定义。null 推断成 Any,空数组是 List[Any];数组里只有部分记录带的字段,勾选那个选项后会生成 Optional 并默认 None。
关于JSON转Python模型
粘一段 JSON,生成 Pydantic 模型(或普通 dataclass):字段名保持 snake_case,类型按值推断,嵌套对象生成独立的模型类。
被引用的类必须排在前面。 Python 是按顺序解析名字的——如果 Root 先出现、Order 后出现,Root 里的 List[Order] 在定义时根本还不存在,直接 NameError。所以这里输出时会把子类反着排到前面,这是和 Java 那页最不一样的地方。
几乎不需要别名。 Python 的惯例本来就是 snake_case,JSON 里的 user_id 可以直接用;只有 class 这类关键字、或者 key 里带 -、@、$ 的,才需要 Field(alias="...")。所以生成的模型比 Java 版干净得多。
默认给 Pydantic 是因为多数人拿去接 FastAPI 请求体:会做类型校验、支持 alias、能直接 model_dump()。dataclass 只做数据结构、不校验,需要的话切一下即可。
三处推断不出来的地方:null 是 Any(不知道它本来是什么)、空数组是 List[Any](没有元素可看)、数组里只有部分记录带的字段——勾上「缺字段用 Optional」会生成 Optional[X] = None,不勾就是必填。
常见问题
生成的代码能直接用吗?
需要 pydantic v2。FastAPI 项目自带这个依赖;单纯用 dataclass 风格则不需要装任何东西。
为什么字段名基本没变?
Python 的惯例就是 snake_case,JSON 里的 user_id 本来就能直接用。只有关键字(class、from)和带连字符、@、$ 的 key 才会被改名并加 alias。
Pydantic 和 dataclass 该选哪个?
要校验外部输入、接 FastAPI、需要 alias 就用 Pydantic;只是想在代码里搬数据,dataclass 更轻。
为什么子模型的类排在前面?
Python 按顺序解析名字,被引用的类必须先定义,否则会 NameError。
可选字段是怎么判断的?
数组里多条记录,某条没有这个键,就认为它是可选的。勾选后会生成 Optional[X] = None。
会上传我的 JSON 吗?
不会。生成全在浏览器里完成。