JSON в класс данных для Python

Вставьте пример JSON-данных и получите файл формата @dataclass (или Pydantic BaseModel) с указанием типов для всех полей, str, int, float, bool, Optional[...] и List[...] в соответствующих случаях. Вложенные объекты становятся отдельными классами данных. Результат выводится в формате PEP 8 и готов к вставке в Python-файл.

Как преобразовать JSON в класс данных

  1. 1

    Вставьте JSON

    Достаточно одного образца; использование нескольких образцов улучшает определение того, какие поля могут быть null.

  2. 2

    Выберите стиль

    Стандартная библиотека `@dataclass`, Pydantic `BaseModel` или `TypedDict`, только для статической проверки типов.

  3. 3

    Выберите версию Python

    3.9+ для синтаксиса `list[str]`, 3.10+ для типов объединений `|`, 3.8 для `Optional[...]` и `List[...]`.

  4. 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. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.

Инструмент доступен на других языках