JSON в класс данных для Python
Вставьте пример JSON-данных и получите файл формата @dataclass (или Pydantic BaseModel) с указанием типов для всех полей, str, int, float, bool, Optional[...] и List[...] в соответствующих случаях. Вложенные объекты становятся отдельными классами данных. Результат выводится в формате PEP 8 и готов к вставке в Python-файл.
Как преобразовать JSON в класс данных
-
1
Вставьте JSON
Достаточно одного образца; использование нескольких образцов улучшает определение того, какие поля могут быть null.
-
2
Выберите стиль
Стандартная библиотека `@dataclass`, Pydantic `BaseModel` или `TypedDict`, только для статической проверки типов.
-
3
Выберите версию Python
3.9+ для синтаксиса `list[str]`, 3.10+ для типов объединений `|`, 3.8 для `Optional[...]` и `List[...]`.
-
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 |
| null (присутствует только в отдельности) | None |
| null + другой тип | 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). - Optional без значения по умолчанию.
email: Optional[str]без= Noneвсё равно требует указания аргумента. Приведите это в соответствие с семантикой вашего JSON. - Pydantic v1 и v2. Синтаксис и поведение различаются (класс
Configпротивmodel_config,validatorпротивfield_validator); по умолчанию используется версия v2. - Порядок в union важен при десериализации. Pydantic проверяет типы в порядке их объявления; при возможной неоднозначности ставьте наиболее специфичный тип первым (например,
intпередstr).
Часто задаваемые вопросы
Класс данных для простых объектов с нулевым уровнем валидации. Pydantic, при необходимости проверки данных во время выполнения, принудительной преобразования или интеграции с FastAPI. TypedDict, когда требуется только статическая проверка типов (методы mypy и pyright) и не требуется использование экземпляров класса.
Не требуется для Python 3.10+, где объединения | и синтаксис list[str] встроены в язык. Полезно для проектов версий 3.7–3.9 для использования нового синтаксиса с помощью строковых аннотаций по стандарту PEP 563; генератор выдаёт предупреждение, когда это необходимо.
Каждый вложенный объект становится отдельным классом. Корневой класс указывает на них по имени, что позволяет повторно использовать типы данных. Циклические ссылки обнаруживаются и помечаются.
Да, если вы выберете пакет Pydantic: FastAPI напрямую использует модели Pydantic в качестве типов запросов и ответов. Для внутренней обработки данных пакет @dataclass более компактен и удобен в использовании.
Сопутствующие инструменты
Справочная таблица ASCII
Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.
Справочник сочетаний клавиш
Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.
Справочник символов HTML
Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.
Шпаргалка по Markdown
Практический справочник Markdown с настоящим предпросмотром и готовыми для копирования примерами заголовков, списков, таблиц, кода, ссылок, изображений и синтаксиса GFM.
Счетчик FPS
Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.
Шпаргалка по регулярным выражениям
Поисковый справочник регулярных выражений для JavaScript, PCRE2/PHP, Python re и .NET. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.
Инструмент доступен на других языках
- JSON ke Dataclass Python [ID]
- JSON a Dataclass de Python [ES]
- JSON vers Dataclass Python [FR]
- JSON에서 Python 데이터 클래스로 변환하기 [KO]
- JSON naar Python-dataclass [NL]
- JSON ถึงคลาสข้อมูลใน Python [TH]
- فئة بيانات من JSON إلى بايثون [AR]
- JSON zu Python Dataclass [DE]
- Từ JSON đến lớp dữ liệu Python [VI]
- JSON till Python-dataklass [SV]
- JSON do klasy danych w Pythonie [PL]
- JSON para Dataclass em Python [PT]
- JSONからPythonデータクラスへの変換 [JA]
- JSON in Dataclass Python [IT]
- JSON'dan Python Veri Sınıfına [TR]
- 从 JSON 到 Python 数据类 [ZH]
- JSON to Python Dataclass [EN]