JSON 转 Python 类
JSON 自动生成 Python 数据类
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
选项
生成的 Python 代码
from dataclasses import dataclass
from typing import Any, List, Optional, Union
@dataclass
class RootOwner:
name: str
email: Any
@dataclass
class RootItems:
sku: str
price: float
note: Optional[str]
@dataclass
class Root:
id: int
name: str
is_active: bool
score: float
owner: RootOwner
tags: List[str]
items: List[RootItems]
meta: Any结果摘要: 类型数 3 · 字段数 13 · 命名冲突 0
类型完全由 JSON 推断:嵌套对象各自成一个类,数组按元素合并类型(同构是 List[T],异构是 Union[...]),可空与可选字段写成 Optional[...]。dataclass 模式不写默认值(Python 要求带默认值的字段排在最后),需要默认值时用 pydantic 模式。
这个工具能做什么
- 把接口返回的 JSON 样例变成 Python 类型注解代码:默认输出 dataclass,勾选后输出 pydantic 的 BaseModel,直接粘进项目就能用。
- 给爬虫或数据脚本补类型提示:嵌套对象各自成一个类,数组按元素合并成 List[T],异构数组用 Union[...] 表达。
- 用 pydantic 做请求体校验时选 pydantic 模式,可空与可选字段会带上 = None 默认值,缺失字段不再报 ValidationError。
- 字段名带 - 或以数字开头时自动改成合法标识符,Python 保留字(class、import 等)自动补下划线,生成结果一定能 import。
示例
输入
{"id":1,"name":"UniKit","tags":["a","b"]}输出
from dataclasses import dataclass
from typing import Any, List, Optional, Union
@dataclass
class Root:
id: int
name: str
tags: List[str]dataclass 模式不写字段默认值(Python 要求带默认值的字段排在最后),需要默认值就切到 pydantic 模式,可选字段会得到 = None。
常见问题
dataclass 和 pydantic 该选哪个?
只想给 IDE 和类型检查器看类型,用 dataclass 就够了,零依赖。要在运行时校验外部数据、需要字段默认值或序列化方法,就用 pydantic 模式。
为什么 dataclass 模式的可选字段没有 = None?
Python 要求带默认值的字段必须排在无默认值字段之后,而 JSON 里字段顺序是任意的,加默认值会产生「non-default argument follows default argument」语法错误。所以 dataclass 只写注解,需要默认值就用 pydantic。
JSON 里的 null 和缺失字段分别生成什么?
字段值是 null、或者只在数组的部分元素里出现时,都会包一层 Optional(例如 Optional[int])。只有一个例外:这个键在所有样例里都只是 null,没有任何类型线索,就退化成 Any。数组里的可空元素写成 List[Optional[T]]。
嵌套对象会变成嵌套类吗?
不会。每个对象都是顶层类,按字段路径推导类名(例如 owner 下面的对象叫 Owner),根类放最后。这样定义顺序天然满足 Python「先定义后引用」的要求。
我的 JSON 会被上传吗?
不会。全部解析与生成都在浏览器本地完成,页面不发网络请求,断网可用。
关键词:jsonpythondataclasspydantictypingjson to pythonJSON 转 Python数据类类型注解代码生成