从 JSON 到 Python 数据类
粘贴 JSON 示例即可生成@dataclass(或Pydantic格式的BaseModel),其中每个字段均包含类型提示,适当时需标注str、int、float、bool、Optional[...]及List[...]。嵌套对象将自动成为独立的数据类。输出结果采用PEP 8格式,可直接粘贴至Python文件中。
如何将 JSON 转换为数据类
-
1
粘贴 JSON
单个样本即可满足需求;提供多个样本可更准确地判断哪些字段可以为空(可空性)。
-
2
选择样式
标准库 `@dataclass`、Pydantic `BaseModel` 或 `TypedDict`(仅用于静态类型检查)。
-
3
选择Python版本
`list[str]`语法版本要求3.9及以上;`|`联合类型版本要求3.10及以上;`Optional[...]`/`List[...]`版本要求3.8。
-
4
复制代码
一个根类及其嵌套类。将其粘贴到 `.py` 文件中并导入。
示例输出:标准 @dataclass
输入:
{ "first_name": "Alice", "age": 30, "email": null, "tags": ["admin"] }
输出(Python 3.10及以上版本):
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class User:
first_name: str
age: int
tags: list[str] = field(default_factory=list)
email: Optional[str] = None
使用 Pydantic 的相同输入
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
first_name: str
age: int
email: Optional[str] = None
tags: list[str] = []
类型映射
| JSON 值 | Python 类型 |
|---|---|
| 字符串 | str |
| 整数 | int |
| 数字(小数) | float |
| 布尔值 | bool |
| 空值(单独显示) | None |
| 空值 + 其他类型 | Optional[T] |
| ISO日期字符串 | date(Python 3.7+) |
| ISO 日期时间 | datetime |
| 单类型数组 | list[T] |
| 混合数组 | list[Union[T1, T2]] |
| 对象 | 嵌套类 |
Dataclass、Pydantic 与 TypedDict 的区别
| 类型 | 使用时机 |
|---|---|
@dataclass |
标准库解决方案,无需运行时验证 |
| Pydantic | 运行时验证与强制转换(FastAPI、设置) |
TypedDict |
仅进行静态类型检查,不涉及实例类 |
attrs |
在 attrs 上实现标准化的遗留项目 |
常见错误
- 忘记使用
default_factory设置可变默认值。list[str] = []默认值属于数据类陷阱(跨实例共享),请使用field(default_factory=list)。 - **可选但无默认值。**即使不包含
= None,email: Optional[str]仍需该参数。请确保其与您的 JSON 语义一致。 - **Pydantic v1与v2版本对比:**语法及功能特性存在差异(类
Config与model_config、validator与field_validator)。生成器默认使用v2版本。 - 组合顺序对反序列化至关重要。Pydantic会按照声明顺序验证类型;若存在歧义,应优先使用最具体的类型(例如:
int应置于str之前)。
常见问题
用于存储无验证信息的简单值类型的数据类。使用 Pydantic 时,可实现运行时验证、类型强制转换或 FastAPI 集成;仅需静态类型检查(如 mypy、pyright)且无需创建类实例时,则使用 TypedDict。
不适用于Python 3.10及以上版本(这些版本已原生支持|联合语法和list[str]语法)。对于3.7至3.9版本的项目,可通过PEP 563字符串注释使用更新的语法。生成器会在需要时发出警告。
每个嵌套对象均成为独立的类。根类通过名称引用这些对象,从而实现类型复用。系统会检测并标记循环引用。
是的,如果您选择Pydantic架构方案。FastAPI直接使用Pydantic模型作为请求/响应类型;而在内部数据处理方面,@dataclass则更为轻量级。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
邮箱验证器
验证邮箱地址:RFC 5322 语法检查、实时 MX 记录查询,并显示本地部分、域名和长度详情。不会发送任何邮件。
编辑器配置生成器
根据你的缩进样式与大小、行尾、字符集和空格规则生成 .editorconfig 文件,让不同集成开发环境(IDE)和编辑器的格式保持一致。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
此工具还提供其他语言版本
- JSON ke Dataclass Python [ID]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON a Dataclass de Python [ES]
- JSON vers Dataclass Python [FR]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON till Python-dataklass [SV]
- JSONからPythonデータクラスへの変換 [JA]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON zu Python Dataclass [DE]
- JSON do klasy danych w Pythonie [PL]
- JSON para Dataclass em Python [PT]
- JSON in Dataclass Python [IT]
- JSON в класс данных для Python [RU]
- JSON'dan Python Veri Sınıfına [TR]
- JSON to Python Dataclass [EN]