JSON 转 Python 类
粘贴 JSON,即可生成带类型注解的 Python dataclass 或 Pydantic v2 模型,支持嵌套类、list[...]、可选字段、snake_case 命名和 from_dict 辅助方法。
需要 Python 3.10 或更高版本(使用了 list[...] 和 X | None)。类按先定义后使用的顺序排列。
类型推断使用 JavaScript 数字,因此整数样本必须在 ±9,007,199,254,740,991 范围内。更大的标识符或精确的小数值请使用字符串。
用法:obj = User.from_dict(json.loads(text))
根据 JSON 样本生成带类型注解的 Python 类:支持嵌套对象、列表、可为空的字段和指向原始键的别名。你可以选择标准库的 dataclass(可附带 from_dict() 辅助方法),也可以选择支持运行时校验的 Pydantic v2 模型。
使用方法
- 粘贴一个 JSON 对象,或一个对象列表——提供多个样本,工具才能识别出可选字段。
- 输入根类的名称。
- 选择 dataclass 或 Pydantic,以及是否把键转换为 snake_case。
- 把代码复制到你的项目中(Python 3.10 或更高版本)。
计算公式
string → str · 整数 → int · 小数 → float(int 与 float 混合时为 float)· true/false → bool · 对象 → 新类 · 数组 → list[元素类型] · null → | None · 类型混合 → Any
缺少的键会变成默认值为 None 的可选字段;dataclass 会把有默认值的字段放在最后。嵌套类的名称取自键,列表名称会转为单数。只有推导出的名称和字段都一致时,类才会共用同一个定义。整数样本必须在 ±9,007,199,254,740,991 范围内。JavaScript 数字推断会拒绝非有限值和会丢失小数部分的数字,较大的标识符或精确小数请使用字符串。
示例
默认样本会生成 3 个类和 16 个字段:Address、Order 和 User。"total": 59.9 与 "total": 12 合并为 total: float;couponCode 只出现在一个订单中,所以变成 coupon_code: str | None = None;"lastLogin": null 只有 null 无法判断类型,所以变成 last_login: Any = None。在 from_dict() 中,orders 由 [Order.from_dict(x) for x in d["orders"]] 构建。改用 Pydantic 后,每个被重命名的键都会改为带有 Field(alias="userName")。
常见问题
dataclass 还是 Pydantic?
dataclass 是内置的,速度快,但不做校验或类型转换。Pydantic 会检查类型,把 "12" 这样兼容的值转换为 12,还能用 model_validate_json() 直接从 JSON 字符串解析出嵌套对象。Pydantic 适合 API 边界,dataclass 适合内部数据。
样本里是 12,为什么字段是 float?
只要该键的任何一个值带有小数部分,字段就会是 float。JSON 中的 12.0 会被读成整数 12,所以如果字段可能出现小数,请提供含有真正小数(如 12.5)的样本。
像 "first-name" 或 "class" 这样的键会怎样?
它们会变成合法的名称:first-name → first_name,class → class_。from_dict() 仍然读取原始键;在 Pydantic 中,原始键会成为别名。
可以在顶层粘贴列表吗?
可以。[ {…}, {…} ] 中的各项会合并为一个根类;结果下方的提示会说明如何解析整个列表。
资料来源
最后更新:
包含这些输入的页面地址: https://kakao.mobile/zh/tools/json-to-python-class-tool/
引用此工具
kakaoCalc. (2026, November 8). JSON 转 Python 类. https://kakao.mobile/zh/tools/json-to-python-class-tool/
“JSON 转 Python 类.” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/json-to-python-class-tool/.