Skip to content

JSON 转 Python 类转换器

粘贴 JSON 即时生成 Python 类 — dataclass、Pydantic v2 或 TypedDict。正确推断 Optional 类型、camelCase 别名、嵌套类。100% 在浏览器中运行,免费。

无追踪 浏览器中运行 免费
输出
0 字符
Python 输出
0
已对照 Python 3.12+ 语法和 Pydantic v2 语义,针对真实 API 负载进行验证。 — Go Tools Team · 2026年7月3日

什么是 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. 1

    粘贴你的 JSON

    将 JSON 对象、数组或 API 响应放入输入框,转换即刻开始。

  2. 2

    选择 dataclass、Pydantic 或 TypedDict

    切换输出风格以匹配你的项目,并把根类从默认的 Root 重命名。

  3. 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 类?
将 JSON 粘贴到输入框中。转换器会在浏览器中即时解析,并在右侧生成 Python 代码。用切换开关选择 dataclass、Pydantic v2 或 TypedDict,然后点击「复制」— 无需上传、无需账户、无需等待。
dataclass、Pydantic 与 TypedDict 输出有什么区别?
dataclass 提供标准库的 @dataclass,无任何依赖 — 适合纯数据容器。Pydantic v2 生成 BaseModel 类,在运行时校验并转换数据,非常适合解析不可信的 API 响应。TypedDict 为静态类型检查器(mypy、Pyright)描述普通 dict 的形状,零运行时开销。切换模式即可对同一段 JSON 逐一对比。
如何从 JSON 生成 Pydantic 模型?
选择 Pydantic v2 标签页。字段会转换为 snake_case 并带上 Field(alias="originalKey"),因此模型仍能读取 camelCase 的 JSON;而 model_config = ConfigDict(populate_by_name=True) 让你也能按字段名构造它。用 Root.model_validate(data) 解析负载 — Pydantic 会校验类型,并在输入错误时抛出清晰的报错。
dataclass 输出如何处理 camelCase 键?
dataclass 没有内置别名机制,因此为了让 Root(**data) 正常工作,dataclass 模式会在原始键是合法 Python 标识符时保留它作为字段名(publicRepos 仍为 publicRepos)。如果你想要地道的 snake_case 加别名,请改用 Pydantic v2 模式,它会把 snake_case 字段映射回准确的 JSON 键。
可选字段和 null 字段是如何标注类型的?
当某个键只出现在部分数组元素中时,它的类型会被包进 Optional。只会是 null 的字段会变成 Optional[Any],因为单凭 JSON null 无法确定类型。请粘贴一个带有实际填充值的代表性样本,以获得比 Any 更具体的类型。
每种 JSON 值会映射为哪种 Python 类型?
字符串映射为 str,布尔值为 bool,整数为 int,任何带小数点或指数的数字为 float。由于 Python 整数是任意精度的,即使是超大 ID 也仍为 int — 不存在 64 位溢出。空数组或混合类型数组会变成 List[Any],对象会变成嵌套类。
它能处理嵌套对象和对象数组吗?
能。每个嵌套对象都会成为独立命名的类,结构相同的会被去重,合并成一个类供每个字段复用。对象数组会逐键合并,因此你得到一个元素类,部分元素缺失的键会被标记为 Optional。子类始终会在使用它们的类之前输出。
Python 关键字和非标识符键是如何处理的?
作为 Python 关键字的 JSON 键(class、from、import)会加上尾部下划线(class_)。带连字符、空格或以数字开头的键,在 dataclass 和 Pydantic 模式下会被净化为合法标识符。在 TypedDict 模式下,任何包含非标识符键的 dict 都会用函数式 TypedDict('Name', {...}) 语法输出,以准确保留像 "first-name" 这样的键。
如何用生成的 dataclass 解析 JSON?
对于扁平对象,json.loads 之后直接用 Root(**data) 即可。对于嵌套结构,dataclass 不会自动递归 — 你可以自己构造子对象、使用 dacite 或 pydantic.dataclasses 之类的库,或把本工具切到 Pydantic v2 模式,用 Root.model_validate(json.loads(text)) 一次调用即可解析整棵树。
我的 JSON 数据是否私密安全?
是的。转换 100% 在浏览器中通过 JavaScript 完成。你的 JSON — 包括 token、ID 或客户数据 — 永不离开页面,也永不发送到服务器。
本工具免费吗?需要账户吗?
完全免费,无需注册,无使用限制,也没有广告干扰工作区。页面加载后即可离线使用。