JSON в dataclass и TypedDict на Python
Преобразуйте JSON в классы dataclass или TypedDict на Python с аннотациями типов, полями Optional и вложенными классами в порядке зависимостей. Бесплатно, в браузере.
Классы упорядочены так, что зависимости идут первыми. Необязательные поля по умолчанию равны None; TypedDict использует NotRequired (Python 3.11+).
Работает полностью в вашем браузере. Ваши данные никуда не загружаются.
Похожие Инструменты
Просмотреть ВсеЧто такое JSON в Python?
Создаёт типизированные классы Python по образцу JSON: либо классы @dataclass, либо определения TypedDict. Вложенные объекты становятся собственными классами, которые выдаются раньше использующих их классов, чтобы модуль импортировался без ошибок.
Как пользоваться JSON в Python
- Вставьте образец JSON в поле Входной JSON (либо нажмите Загрузить пример или Открыть файл).
- Задайте Имя корневого типа (по умолчанию
Root). - Выберите Стиль вывода:
@dataclassилиTypedDict. - Скопируйте сгенерированный код Python или нажмите Скачать, чтобы сохранить его в файл.
Пример
{"id":1,"name":"A","tags":["x"]} from dataclasses import dataclass
from typing import List
@dataclass
class Root:
id: int
name: str
tags: List[str] Когда использовать JSON в Python
Используйте, чтобы добавить аннотации типов для данных JSON в скриптах, коде FastAPI или тестах. Dataclass не преобразуют вложенные словари автоматически — для этого нужна библиотека вроде dacite или pydantic, либо стиль TypedDict, чтобы оставить обычные словари.
Как работает JSON в Python
Образец обходится рекурсивно, и каждая позиция собирает встреченные в ней типы. Массивы объектов объединяются в один тип: ключ, отсутствующий у части элементов, становится необязательным, ключ, который где-то равен null, получает допустимое значение null, целые числа вперемешку с дробными становятся типом с плавающей точкой, а всё остальное со смешанными типами сводится к динамическому типу. Вложенные объекты становятся собственными именованными типами (PascalCase от ключа, ключи-массивы переводятся в единственное число: orders → Order), а при совпадении имён добавляются числовые суффиксы. В Python используются int, float, str, bool, List[T], Optional[T] для null и Any для динамических значений. В dataclass обязательные поля идут первыми, а необязательные получают = None; ключи, не являющиеся допустимыми идентификаторами (или совпадающие с ключевыми словами, как class), переименовываются в snake_case с комментарием # JSON key. В TypedDict отсутствующие ключи помечаются NotRequired, а при недопустимом идентификаторе используется функциональный синтаксис TypedDict("Name", {...}).
Распространенные Случаи Использования
- Аннотирование ответа JSON API для mypy или Pyright
- Создание dataclass для конфигурационного файла
- Описание полезной нагрузки вебхуков через TypedDict
- Генерация начальных моделей перед переходом на pydantic
Часто Задаваемые Вопросы
Какая версия Python нужна?
Вывод dataclass работает на Python 3.7+. Вывод TypedDict использует NotRequired, который есть в модуле typing начиная с Python 3.11 (или в typing_extensions для старых версий).
Почему некоторые поля переименованы?
Ключи вроде first-name или class не годятся как имена атрибутов, поэтому становятся first_name / class_ с комментарием, показывающим исходный ключ JSON.
Можно ли загрузить JSON прямо в dataclass?
Root(**data) работает для плоских данных; вложенные объекты остаются словарями, пока вы не преобразуете их сами или не воспользуетесь вспомогательной библиотекой.