Перейти к содержимому

JSON в TypeScript, Go, Python и другие языки

Вставьте примеры JSON и получите интерфейсы TypeScript, схемы Zod, структуры Go и типы для Python, Java, C#, Kotlin, Swift и Rust. Всё создаётся в браузере.

Несколько примеров (подряд или в формате JSON Lines) и объекты внутри массивов объединяются: ключи, которых где-то нет, становятся необязательными, а значения null — допускающими null.

TypeScript
Вставьте пример и нажмите «Создать типы».
Объявить как
Работает в браузере · без загрузки на серверКак это работает

Как пользоваться: JSON в типы

  1. 1

    Вставьте примеры JSON

    Вставьте один ответ, массив записей или несколько ответов подряд; в примере показаны два объединённых пользователя.

  2. 2

    Выберите язык

    Выберите TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift или Rust и настройте стиль для него.

  3. 3

    Назовите корневой тип

    Задайте имя типа верхнего уровня, например User или OrderResponse.

  4. 4

    Создайте и скопируйте

    Нажмите «Создать типы», затем скопируйте код или скачайте его; при правках он обновляется автоматически.

Лимиты и Pro

Бесплатно и без регистрации: 9 языков вывода с 3 стилями Python, любое число объединяемых примеров и файлы до 20 MB; генерация прерывается через 30 секунд.

Pro убирает рекламу; сам генератор на всех тарифах одинаковый. Смотреть Pro

О инструменте «JSON в типы»

Писать типы для ответа API вручную долго, и легко ошибиться, особенно когда данные вложены на три уровня. Вставьте один или несколько примеров JSON, и генератор определит структуру и выдаст готовые определения на девяти языках: интерфейсы или псевдонимы типов TypeScript, TypeScript со схемами Zod для проверки данных на лету, структуры Go с json-тегами, dataclass, TypedDict или модели Pydantic v2 для Python, record-классы Java с аннотациями Jackson, классы C# для System.Text.Json, data-классы Kotlin для kotlinx.serialization, структуры Swift Codable и структуры Rust для serde.

Один пример редко показывает все поля, поэтому генератор объединяет столько примеров, сколько вы ему дадите. Вставьте несколько документов подряд, JSON Lines или массив объектов: ключ, которого нет в части объектов, станет необязательным; ключ, который иногда равен null, получит допустимое значение null; целое число, которое иногда встречается как дробное, станет типом с плавающей точкой; а по-настоящему разнородные значения превратятся в объединение типов или в динамический JSON-тип языка. Вложенные объекты получают собственные именованные типы: orders превращается в Order, addresses — в Address, а одинаковые структуры создаются один раз и используются повторно. Объекты, ключи которых — числа, UUID или даты, превращаются в словари.

Имена полей приводятся к принятому в каждом языке стилю, а отличающиеся JSON-ключи, например first-name или class, сопоставляются с исходными с помощью нужной аннотации, алиаса или CodingKeys. Комментарии и лишние запятые в конце в примере допускаются.

Результат описывает только те примеры, которые вы дали: генератор не может знать о полях и значениях, которых в них нет, поэтому сверьте код с документацией вашего API, прежде чем на него полагаться.

Конфиденциальность

Примеры разбираются, а код создаётся веб-воркером прямо в этой вкладке, поэтому ответы API с личными или внутренними данными никуда не загружаются. Язык и параметры имён сохраняются в локальном хранилище, а вставленный вами JSON не сохраняется.

Возможности

Объединяет много примеров

Отсутствующие ключи становятся необязательными, а значения null — допускающими null во всех вставленных примерах.

9 языков

TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift и Rust с именами в стиле каждого языка.

Сопоставление ключей

json-теги, алиасы, @SerialName, @JsonProperty и CodingKeys сохраняют исходные имена из JSON.

JSON в типы: частые вопросы

Как определяется, какие поля необязательные?
Поле необязательное, если хотя бы в одном из объектов на этом месте нет такого ключа. Если вы вставили один объект, все поля обязательные, ведь ничто не говорит об обратном. Вставьте несколько реальных ответов или массив записей, чтобы генератор увидел, какие ключи появляются и пропадают. Параметр «Сделать все поля необязательными» подойдёт для частичных данных и PATCH-запросов.
Что будет, если значение иногда равно null?
Поле станет допускающим null: string | null в TypeScript, указатель в Go, str | None в Python, String? в Kotlin и Swift, Option<String> в Rust и упаковываемый или nullable-тип в Java и C#. Если поле равно null во всех примерах, вывести тип невозможно, поэтому используется неизвестный или динамический JSON-тип языка.
Почему целые числа стали дробными?
Если в одном примере у поля значение 7, а в другом 7.5, тип должен вмещать оба, поэтому выбирается float или double. Числа, записанные с десятичной точкой, например 10.0, тоже считаются дробными. В TypeScript оба случая — number, а в Zod поле только с целыми проверяется через z.number().int().
Это то же самое, что quicktype?
Задача та же, но здесь собственный генератор, который целиком работает в браузере и добавляет кое-что своё: три стиля Python, включая TypedDict, схемы Zod и объединение нескольких вставленных документов. Зато quicktype поддерживает больше языков и умеет читать JSON Schema. Для девяти языков здесь код рассчитан на компиляцию без дополнительных библиотек.
Умеет ли он находить даты, перечисления и UUID?
Нет. Строки остаются строками: по нескольким примерам нельзя доказать, что все будущие значения окажутся датами или элементами фиксированного набора. Если ваш API это гарантирует, замените тип вручную на Date, time.Time, datetime, enum или тип UUID. Исключение — объекты с ключами в виде UUID, чисел или дат: они превращаются в словари.