跳到主内容
UniKit

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 样例变成 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数据类类型注解代码生成

同类工具