Генерация типов

JSON в PythonМодели dataclass и Pydantic

Сравните две записи: отсутствующий ключ и явный null приводят к разным значениям по умолчанию.

JSON в Python

Входной JSON

Разбор и генерация выполняются в этом браузере. Входные данные не отправляются и не сохраняются.

Созданный код

Параметры генерации

Python 3.9+. Метаданные dataclass не декодируют и не проверяют данные. Pydantic 2.12.5 включает load_models(source); используйте её для выбранной обработки чисел.

Примеры массива определяют модель элемента Root. load_models в Pydantic принимает объект или массив.

Классов: 2 · Полей с null: 2

Конвертер JSON в Python создаёт черновик модели по характерным ответам API. Добавьте записи с разными наборами ключей: один полный объект не показывает, какие поля могут отсутствовать.

Выберите dataclass для типизированных контейнеров стандартной библиотеки или модели Pydantic для разбора данных при загрузке. Примеры показывают наблюдаемые типы, но не задают все правила предметной области.

Зачем использовать JSON в Python?

Отсутствие поля отличается от null

JSON в Python оставляет обязательным поле, которое есть во всех записях, даже если оно допускает null. Если другая запись не содержит ключа, поле получает None по умолчанию. От этого зависит вызов конструктора.

Две карточки объектов связывают маркер null и отсутствующую ячейку с разными значениями по умолчанию.

Не теряйте исходные ключи

Зарезервированным словам, знакам пунктуации и именам методов нужны безопасные имена атрибутов. Исходное написание сохраняется в метаданных dataclass или псевдонимах Pydantic; конфликты разрешаются предсказуемыми суффиксами.

Ключи неправильной формы соединяются с безопасными атрибутами через метаданные и проверяемые псевдонимы.

Определите правила загрузки

01

Добавьте разные записи

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

02

Проверьте значения по умолчанию

Обычный режим добавляет None только для отсутствовавших ключей. Режим всех необязательных полей разрешает пропуск каждого поля. Даты остаются str, пока не выбран ISO. Decimal применяется к дробным и экспоненциальным числам и содержащим их числовым группам.

03

Экспортируйте свежий результат

Генерация начинается через 350 мс после редактирования. Отключите автоматический режим для кнопки создания или Ctrl/Cmd+Enter. Изменения сразу блокируют экспорт. Очистка и пример сохраняют один снимок ввода, настроек и кода для отмены.

Типы и поведение кода

Две библиотеки, один файл

JSON в Python создаёт dataclass только со стандартной библиотекой и размещает обязательные поля раньше полей со значениями по умолчанию. Вывод Pydantic рассчитан на 2.12.5. Дочерние классы объявляются раньше использующих их классов: файл можно импортировать в Python 3.9.

Явная политика для чисел

Группы только из целых используют int произвольной точности. При наличии дроби или экспоненты вся группа по умолчанию использует float, включая большие целые, которые могут округлиться. В режиме Decimal такие группы используют Decimal; загрузчик разбирает дроби без промежуточного float даже внутри контейнеров Any.

Осторожное распознавание дат

ISO распознаёт допустимые календарные даты и полные отметки времени с часовым поясом и не более шести знаков долей секунды. Все ненулевые строки в позиции должны иметь один вид даты. Ошибочные даты, время без пояса и более точные строки остаются str. Pydantic преобразует распознанные строки, dataclass — нет.

Безопасные имена и псевдонимы

Поля получают ASCII snake_case. Ключевые слова, начальные подчёркивания, имена model_* и методы BaseModel переименовываются. Пустые ключи, Unicode и управляющие символы сохраняют псевдонимы. Приватные псевдонимы импортов предотвращают конфликты с классами Decimal и BaseModel.

Границы сгенерированного файла

Dataclass хранит данные
Аннотации и метаданные json_key не проверяют ввод, не переименовывают входящие ключи, не создают вложенные объекты и не разбирают даты. Экземпляры нужно создавать явно. Вложенный dict останется словарём; asdict использует имена атрибутов Python, а не псевдонимы из метаданных.
Используйте загрузчик Pydantic
Установите pydantic==2.12.5 и вызовите load_models(source). Он применяет json.loads с выбранной политикой float/Decimal перед model_validate и возвращает модель или список. Прямой вызов model_validate_json не даёт гарантии точности Decimal этого загрузчика. При сериализации Decimal обычно становится строкой JSON.
Проверка не заменяет бизнес-правила
Pydantic принимает только исходные псевдонимы JSON и отклоняет неизвестные свойства через extra="forbid". Optional[T] допускает null, а значение по умолчанию — пропуск поля. Отсутствующие поля получают None; отличить их от null помогает model_fields_set. Применяется обычное приведение типов Pydantic, а не строгая проверка предметной области.
Недостаточные данные дают широкие типы
Несовместимые виды значений и поля только с null используют Any; пустые массивы — List[Any]; пустые вложенные объекты — Dict[str, Any]. Нет генерации перечислений, UUID, EmailStr, TypedDict, JSON Schema, OpenAPI и ORM. Корневые скаляры, пустые и смешанные корневые массивы отклоняются.
Ошибки имён и диапазона чисел
Без псевдонимов отклоняется любой ключ, требующий переименования. Обе библиотеки отклоняют непарные суррогаты Unicode в ключах. float отклоняет переполнение и ненулевые дроби, обращающиеся в ноль, но не гарантирует десятичную точность. Для точных десятичных значений выбирайте Decimal.
Строгий ввод и лимиты
Нет комментариев, завершающих запятых, повторяющихся ключей, исправления, импорта файлов, загрузки URL или выполнения Python. Лимиты: 500 000 входных символов, 50 000 узлов, глубина 40, 100 полей в объединённом объекте, 200 классов, 1 000 символов в ключе или числе, модуль экспоненты 10 000 и 1 000 000 символов вывода.

Вопросы о JSON в Python

Когда выбрать dataclass, а когда Pydantic?

Выберите dataclass, если разбор уже выполняет ваш код и нужен контейнер стандартной библиотеки. JSON в Python также предлагает Pydantic для создания вложенных моделей и проверки входа. Используйте load_models и учитывайте обычное приведение типов и запрет неизвестных полей.

Как описать ключ, отсутствующий в части объектов?

В режиме отсутствующих ключей такое поле получает None по умолчанию и допускающий null тип. Если ключ есть всегда, даже иногда со значением null, поле остаётся обязательным. Режим всех необязательных полей разрешает пропуск независимо от наблюдений.

Почему вложенные значения после создания dataclass остаются словарями?

Конструктор dataclass не преобразует значения по аннотациям. Переданный словарь остаётся словарём, пока вы явно не создадите дочерний экземпляр. Для автоматического построения вложенных моделей выберите Pydantic и вызовите load_models.

Какой тип подходит для целого числа больше 2^53?

Если вся группа содержит только целые токены, используется int произвольной точности. Если в группу попала дробь или экспонента, режим float может округлить и большое целое. Выбирайте Decimal и сгенерированный загрузчик для точного представления такой смешанной группы.

Как сохранить ключ JSON, совпадающий с ключевым словом Python?

Оставьте псевдонимы включёнными. Атрибут получает безопасное имя, а исходный ключ сохраняется в Field(alias=...) у Pydantic или json_key у dataclass. Метаданные dataclass должен обработать ваш адаптер; при отключённых псевдонимах такой ключ вызывает ошибку.

Нашли случай для улучшения типов?

Проверьте модель на реальных записях

Используйте JSON в Python с отсутствующими ключами, null и характерными числами, затем проверьте экспортированный код по правилам загрузки вашего приложения.