Перейти к содержанию
100% локально

JSON в Python dataclass

Преобразуйте JSON пример в типизированные классы Python — dataclass, Pydantic, TypedDict или NamedTuple.

Входные данные
Выходные данные

JSON в Python dataclass

Вставьте JSON объект или массив, и этот инструмент автоматически определит тип для каждого поля и сгенерирует соответствующие классы Python с полными аннотациями типов. Выберите стиль вывода, который соответствует вашей кодовой базе: простой @dataclass, Pydantic BaseModel для валидации запросов и ответов, TypedDict для аннотации существующего словарного кода, или NamedTuple для легких неизменяемых записей. Вложенные объекты становятся собственными классами, определенными в правильном порядке, поэтому файл сразу работает; объекты с одинаковой формой — как каждый элемент в массиве записей — повторно используют один класс вместо создания дубликата для каждого.

Опции управляют тем, консервативен ли сгенерированный код или современен. Опция «Optional для пустых полей» преобразует поле, которое было null в вашем образце, в тип Optional (или Any) вместо бесполезного голого None; «Добавить значения по умолчанию» дополняет это с помощью «= None», чтобы поле можно было пропустить при создании экземпляра, а обязательные поля автоматически переупорядочиваются перед полями со значениями по умолчанию, где это требует синтаксис Python. Опция «Псевдоним для неправильных имён полей» обрабатывает ключи JSON, которые не являются допустимыми идентификаторами Python — ключ с дефисом, такой как «first-name», становится атрибутом first_name, связанным обратно с исходным ключом через метаданные поля в dataclass или Field(alias=...) в Pydantic, чтобы сериализация работала правильно. Опция «Использовать list[T] вместо List[T]» переключается между современными встроенными обобщениями PEP 585 и старым стилем typing.List, который некоторые проекты все еще требуют, а переключатель аннотаций будущего изменяет Optional[X]/Union[X, Y] на новый синтаксис X | None / X | Y во всем коде.

Вывод типов различает строки, целые числа, числа с плавающей запятой и логические значения, объединяет смешанное содержимое массива в один тип Union и дает массиву корневых объектов разумное имя класса RootItem с псевдонимом Root = list[RootItem] ниже. Поскольку число JSON не несет собственный маркер int/float, число без десятичной точки всегда читается как int — нет способа восстановить предполагаемое «36.0» после анализа.

Все выполняется локально в вашем браузере: JSON, который вы вставляете, часто реальный ответ API или запись из базы данных, анализируется и преобразуется без отправки где-либо. Скопируйте сгенерированный Python, загрузите его как файл .txt или отправьте вывод обратно на вход, чтобы продолжить его совершенствование.

FAQ

Какие стили вывода поддерживаются?
Четыре: @dataclass (стиль стандартной библиотеки), Pydantic BaseModel (для валидации и анализа JSON), TypedDict (аннотации типов на простом словаре без класса runtime) и NamedTuple (неизменяемые записи, подобные кортежам).
Как обрабатываются вложенные объекты и массивы объектов?
Каждая отличная форма объекта становится собственным классом, названным по полю, которое его содержит, и определённым до класса, который на него ссылается. Объекты с одинаковым набором полей и типов повторно используют один класс вместо дублирования — массив записей одинаковой формы генерирует один класс элемента.
Что происходит с ключами JSON, которые не являются допустимыми идентификаторами Python?
Они очищаются до допустимого имени атрибута (например, «first-name» → first_name). Когда опция «Псевдоним для неправильных имён полей» включена, исходный ключ сохраняется через собственный псевдоним (метаданные поля в dataclass, Field(alias=...) в Pydantic) или завершающий комментарий для TypedDict и NamedTuple, которые не имеют встроенного механизма псевдонима.
Может ли он надежно отличить int от float?
Он классифицирует каждое число по наличию дробной части в вашем образце, но сам JSON не различает int и float для целых чисел — значение, отправленное как 36.0, неотличимо от 36 после анализа, поэтому оно читается как int.
Загружается ли мой JSON куда-либо?
Нет. Анализ и генерация кода выполняются полностью в вашем браузере — JSON, который вы вставляете, и Python, который он производит, никогда не покидают ваше устройство.