JSON 转 Python Dataclass 与 TypedDict
将 JSON 转换为带类型提示的 Python dataclass 或 TypedDict 类,支持 Optional 字段,嵌套类按依赖顺序定义。免费,在浏览器内运行。
类按依赖顺序排列(被引用的先定义)。可选字段默认值为 None;TypedDict 输出使用 NotRequired(Python 3.11+)。
完全在浏览器中运行,您的数据不会被上传。
相关工具
查看全部什么是 JSON 转 Python?
根据 JSON 示例生成带类型的 Python 类:可以是 @dataclass 类,也可以是 TypedDict 定义。嵌套对象会成为各自的类,并且先于使用它们的类输出,这样模块可以顺利导入。
如何使用 JSON 转 Python
- 将 JSON 示例粘贴到 JSON 输入中(或点击加载示例/打开文件)。
- 设置根类型名称(默认为
Root)。 - 选择输出风格:
@dataclass或TypedDict。 - 复制生成的 Python 代码,或下载为文件。
示例
{"id":1,"name":"A","tags":["x"]} from dataclasses import dataclass
from typing import List
@dataclass
class Root:
id: int
name: str
tags: List[str] 何时使用 JSON 转 Python
适合为脚本、FastAPI 代码或测试中的 JSON 载荷添加类型提示。dataclass 不会自动转换嵌套字典——这需要 dacite 或 pydantic 等库,或者使用 TypedDict 风格以保留普通字典。
JSON 转 Python 的工作原理
程序会递归遍历示例,每个位置都会收集见到过的类型。对象数组会合并为一个类型:在部分元素中缺失的键变为可选,在某处为 null 的键变为可空,整数与小数混合会变为浮点类型,其他混合了多种类型的情况则回退为动态类型。嵌套对象成为各自命名的类型(键名的 PascalCase,数组键取单数:orders → Order),名称冲突时添加数字后缀。Python 输出使用 int、float、str、bool、List[T],null 使用 Optional[T],动态值使用 Any。在 dataclass 中,必填字段排在前面,可选字段带有 = None;不是有效标识符(或是 class 等关键字)的键会被改写为 snake_case,并附上 # JSON key 注释。TypedDict 输出用 NotRequired 标记缺失的键,当某个键不是有效标识符时,会切换为函数式的 TypedDict("Name", {...}) 语法。
常见用例
- 为 mypy 或 Pyright 给 JSON API 响应添加类型注解
- 为配置文件创建 dataclass
- 用 TypedDict 描述 Webhook 载荷
- 在改用 pydantic 之前生成起步模型
常见问题
需要哪个 Python 版本?
dataclass 输出适用于 Python 3.7+。TypedDict 输出使用 NotRequired,它在 Python 3.11 起的 typing 模块中可用(旧版本请使用 typing_extensions)。
为什么有些字段被重命名了?
first-name 或 class 之类的键不是有效的属性名,因此会变成 first_name / class_,并附注释说明原始的 JSON 键。
可以直接把 JSON 加载进 dataclass 吗?
对于扁平数据,Root(**data) 可行;嵌套对象仍然是字典,除非你自行转换或使用辅助库。