JSON в dataclass и TypedDict на Python

Преобразуйте JSON в классы dataclass или TypedDict на Python с аннотациями типов, полями Optional и вложенными классами в порядке зависимостей. Бесплатно, в браузере.

Классы упорядочены так, что зависимости идут первыми. Необязательные поля по умолчанию равны None; TypedDict использует NotRequired (Python 3.11+).

Работает полностью в вашем браузере. Ваши данные никуда не загружаются.

Похожие Инструменты

Просмотреть Все

Что такое JSON в Python?

Создаёт типизированные классы Python по образцу JSON: либо классы @dataclass, либо определения TypedDict. Вложенные объекты становятся собственными классами, которые выдаются раньше использующих их классов, чтобы модуль импортировался без ошибок.

Как пользоваться JSON в Python

  1. Вставьте образец JSON в поле Входной JSON (либо нажмите Загрузить пример или Открыть файл).
  2. Задайте Имя корневого типа (по умолчанию Root).
  3. Выберите Стиль вывода: @dataclass или TypedDict.
  4. Скопируйте сгенерированный код 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) работает для плоских данных; вложенные объекты остаются словарями, пока вы не преобразуете их сами или не воспользуетесь вспомогательной библиотекой.

Что сделать дальше

Форматирование JSON
Форматируйте JSON с отступом в 2 или 4 пробела либо табуляцией, сортируйте ключи и узнавайте точную строку и столбец ошибки. Работает в браузере.
Экранирование строк
Один инструмент для экранирования и обратного преобразования строк для JSON, JavaScript, HTML, XML, компонентов URL, регулярных выражений, SQL, CSS и аргументов оболочки.
Минификатор JSON
Минифицируйте JSON, удаляя все незначимые пробелы и сохраняя значения, порядок ключей и большие числа. Показывает экономию размера. В браузере.
Поиск пути в JSON
Выведите все пути документа JSON в синтаксисе JSONPath, JavaScript или jq, нажмите на путь, чтобы увидеть значение, или введите путь для поиска. В браузере.
Сравнение JSON
Сравните два JSON-документа по структуре: добавленные, удалённые и изменённые значения по JSONPath, без учёта порядка ключей и форматирования. В браузере.
Запросы JSON (JSONPath)
Запросы к JSON через JSONPath: подстановки, рекурсивный поиск, срезы и фильтры вида [?(@.price < 10)]. Результат обновляется по мере ввода. Это не jq.

Другие категории