Конвертер JSON в Python

Вставьте ответ API или конфигурацию в JSON и получите для них описания типов на Python. Выберите @dataclass для объектов, которые вы создаёте в коде, или TypedDict для типизации обычных словарей из json.loads. Вложенные объекты становятся отдельными классами, а ключи, которых нет в части элементов, — необязательными.

Генерировать

Работает в браузере: всё, что вы вводите, никуда не отправляется.

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

  1. Вставьте пример JSON. Берите реалистичный: чем больше элементов в массиве, тем точнее определяются необязательные ключи.
  2. Выберите @dataclass или TypedDict.
  3. Скопируйте код. Классы вложенных объектов идут первыми, поэтому файл выполняется сверху вниз.

Как это работает

Пример разбирается в структуру: каждый ключ каждого объекта со всеми встреченными в нём типами. Все объекты одного массива объединяются в один класс.

  • str, int, float, bool, list[…] и вложенные классы пишутся напрямую; null добавляет Optional[…].
  • Имена классов берутся из ключа: в «orders» лежит список Order, а «billing_address» становится BillingAddress. Верхний уровень — Root.
  • Импортируется только то, что используется: dataclass, Any, Optional, TypedDict, NotRequired.

Пример

{"items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} с @dataclass даёт:

from dataclasses import dataclass
from typing import Optional


@dataclass
class Item:
    sku: str
    note: Optional[str]
    qty: Optional[int] = None


@dataclass
class Root:
    items: list[Item]

«note» иногда равен null, поэтому он Optional[str]. «qty» нет во втором элементе, поэтому он получает значение по умолчанию и переносится в конец.

Советы

  • Проверьте типы полей, где пример оказался «удачным»: цена 10 в примере станет int, хотя в других данных может быть 9.99.
  • После генерации переименуйте классы под свою предметную область.
  • Для JSON Schema или TypeScript воспользуйтесь генератором JSON Schema или конвертером JSON в TypeScript.

Частые вопросы

Как типы JSON сопоставляются с Python?

Строки становятся str, true и false — bool, целые числа — int, остальные числа — float (смесь тех и других — float). Массивы становятся list[...], объекты — классами, а null делает тип Optional[...]. Место, где встречаются значения разных видов, получает тип Any.

Как обрабатываются необязательные ключи?

Если в массиве несколько объектов, ключ, которого нет в части из них, считается необязательным. В dataclass он становится Optional[...] = None и переносится после обязательных полей, как того требуют dataclass; в TypedDict он оборачивается в NotRequired[...].

Что происходит с ключами, которые не могут быть именами в Python?

В dataclass ключи вроде first-name, class или 2fa становятся first_name, class_ и f_2fa, а исходный ключ JSON пишется в комментарии. В TypedDict функциональный синтаксис TypedDict('Name', {...}) сохраняет ключи как есть.

Какая версия Python нужна?

Код использует list[...] и Optional из typing — это работает в Python 3.9 и новее. Для NotRequired, которым помечаются необязательные ключи TypedDict, нужен Python 3.11 или typing_extensions.

Разбирает ли dataclass вложенный JSON сам?

Нет. Root(**data) заполняет только верхний уровень, вложенные словари остаются словарями. Преобразуйте вложенные части сами или используйте библиотеку вроде pydantic или dacite.

Ещё в разделе «Разработчикам»

Все инструменты раздела: Разработчикам ·Обновлено 4 ноября 2026 г.

Настройки конфиденциальности

Google Analytics показывает нам, какими инструментами пользуются и работают ли они. Он может ставить cookie. Ваш выбор сохраняется в этом браузере.