JSON 转 Python 类转换器
粘贴 JSON 即时生成 Python 类 — dataclass、Pydantic v2 或 TypedDict。正确推断 Optional 类型、camelCase 别名、嵌套类。100% 在浏览器中运行,免费。
什么是 JSON 转 Python?
JSON 转 Python 会把一段 JSON 示例转换为可直接使用的 Python 类 — 标准库 dataclass、Pydantic v2 模型或 TypedDict — 让你无需为 API 响应或配置文件手写字段定义。这个 Python 类生成器会推断正确的类型(int、float、str、bool、Optional),把嵌套对象变成命名类,并为 camelCase 键添加 Pydantic 别名,全部 100% 在浏览器中完成。
示例
API 响应 → dataclass
{"id":101,"name":"Ada Lovelace","email":"ada@example.com","active":true,"roles":["admin","user"]} from dataclasses import dataclass
from typing import List
@dataclass
class Root:
id: int
name: str
email: str
active: bool
roles: List[str]
典型的 REST 负载会变成可直接使用的 @dataclass。整数推断为 int,带小数的推断为 float,数组变成 List[str]。
嵌套对象(子类在前)
{"repo":"pydantic","owner":{"login":"samuelcolvin","id":100}} from dataclasses import dataclass
@dataclass
class Owner:
login: str
id: int
@dataclass
class Root:
repo: str
owner: Owner
嵌套对象会成为独立命名的类。子类(Owner)会在父类之前输出,因此无需 from __future__ import annotations 代码即可运行。
camelCase → Pydantic v2 别名
{"login":"octocat","publicRepos":15,"createdAt":"2011-01-25"} from pydantic import BaseModel, ConfigDict, Field
class Root(BaseModel):
model_config = ConfigDict(populate_by_name=True)
login: str
public_repos: int = Field(alias="publicRepos")
created_at: str = Field(alias="createdAt")
在 Pydantic 模式下,字段为 snake_case,并用 Field(alias=...) 映射回原始 JSON 键,而 populate_by_name 让你两种方式都能构造模型 — 因此校验能与真实 API 数据往返无损。
对象数组 → TypedDict(可选键)
{"users":[{"id":1,"nick":"x"},{"id":2}]} from typing import List, Optional, TypedDict
class User(TypedDict):
id: int
nick: Optional[str]
class Root(TypedDict):
users: List[User]
对象数组会合并为一个元素类型。部分元素缺失的键(nick)会变成 Optional。TypedDict 描述的是普通 dict 的形状,零运行时开销。
如何将 JSON 转换为 Python
- 1
粘贴你的 JSON
将 JSON 对象、数组或 API 响应放入输入框,转换即刻开始。
- 2
选择 dataclass、Pydantic 或 TypedDict
切换输出风格以匹配你的项目,并把根类从默认的 Root 重命名。
- 3
复制或下载
一键获取生成的 Python 代码,直接粘贴到你的代码中。
Common Use Cases
- 带类型的 API 客户端
- 将 REST 或 GraphQL 响应示例转换为 Pydantic 模型或 dataclass,用于 requests 或 httpx 客户端,无需手写字段定义。
- 配置与夹具解析
- 为需要加载并校验的 JSON 配置文件、测试夹具或 webhook 负载生成模型。
- 快速原型与类型提示
- 粘贴一个不熟悉的负载,即时看到它作为 Python 类型的结构 — 快速探索新 API,或为遗留的 dict 代码补上 TypedDict 提示。
转换原理
- 结构推断
- 每个对象都会成为一个命名类;结构相同的会被去重,因此你得到的是一个类而非多份副本。对象数组会逐键合并,部分元素缺失的键会变成 Optional。
- 三种地道目标
- dataclass 零依赖,并保留合法键以便 Root(**data);Pydantic v2 添加 Field 别名及 populate_by_name 以实现真正的校验;TypedDict 为静态类型检查器描述普通 dict,当键不是标识符时使用函数式语法。
- 正确且轻依赖的类型标注
- 整数映射为 int(任意精度,不会溢出),小数和指数映射为 float,只有 null 的字段映射为 Optional[Any]。typing 的导入(Optional、List、Any)只有在实际用到时才会添加。
- 100% 浏览器端
- 解析和生成都在浏览器中运行,没有任何网络请求,因此你的数据保持私密。
编写整洁 Python 模型的技巧
- 让模式匹配用途
- 内部数据容器用 dataclass,需要校验或解析不可信输入时用 Pydantic v2,只需为现有 dict 加静态类型提示时用 TypedDict。
- 粘贴有代表性的样本
- 只有当某样本省略某字段时它才会被标记为 Optional,而只有 null 的值会回退到 Any。一个填充完整的示例能得到最精确的类型。
- 为根类命名
- 设置一个有意义的根名称(如 User、ApiResponse),而非默认的 Root,让代码更易读、更便于导入。
常见问题
如何将 JSON 转换为 Python 类?
dataclass、Pydantic 与 TypedDict 输出有什么区别?
如何从 JSON 生成 Pydantic 模型?
dataclass 输出如何处理 camelCase 键?
可选字段和 null 字段是如何标注类型的?
每种 JSON 值会映射为哪种 Python 类型?
它能处理嵌套对象和对象数组吗?
Python 关键字和非标识符键是如何处理的?
如何用生成的 dataclass 解析 JSON?
我的 JSON 数据是否私密安全?
本工具免费吗?需要账户吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
Base64 转图片转换工具
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
.env 转 JSON 转换器
编码和格式化
粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。
免费 HTML 实体解码器 — 解码 HTML
编码和格式化
在线解码 HTML 实体、还原转义后的 HTML——免费、免注册、100% 在浏览器中运行。把命名、十进制和十六进制引用转回字符;绝不上传。
免费 HTML 实体编码器 — 转义 HTML
编码和格式化
在线编码 HTML 实体、转义特殊字符(< > & " ')——免费、免注册、100% 在浏览器中运行。支持命名、十进制或十六进制输出;绝不上传。