Инструменты
Руководства

Генератор кода из JSON

JSON

Создавайте типы TypeScript, Java, Go и C# из JSON с выводом вложенных объектов и массивов.

100 % на клиенте Без бэкенда

Удалённые URL не запрашиваются; вставьте JSON напрямую.

JSON
Вывод
На этой странице

Что такое генератор кода из JSON?#

Генератор кода из JSON читает образец JSON-документа, выясняет форму данных — какие поля строки, какие числа, какие вложенные объекты, какие массивы чего — и пишет типы сущностей, которыми реальная программа стала бы держать эти данные. Вместо того чтобы вручную набивать интерфейс TypeScript, класс Java, структуру Go или класс C# под ответ API, вы вставляете один пример ответа и получаете готовые типы, которые можно сразу перенести в проект.

Под капотом он обходит разобранное значение и выводит схему. Вложенные объекты становятся собственными именованными типами; тип элемента массива — это объединение форм всех элементов (поэтому список объектов, не у всех с одинаковыми ключами, всё равно даёт один тип с объединением полей). Имена полей, недопустимые как идентификаторы, — ключи с дефисом вроде first-name или начинающиеся с цифры — превращаются в корректный идентификатор, а исходный ключ сохраняется как аннотация сериализации, поэтому обратный путь тоже работает.

На выходе — исходный код в виде простого текста, без runtime-зависимости от этой страницы. Скопируйте его, вставьте в кодовую базу, поправьте имена типов — и у вас отправная точка: не готовая модель, но скучный каркас уже написан за вас.

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

  1. Выберите язык в выпадающем списке Язык: TypeScript, Java, Go или C#.
  2. Задайте Имя корня (по умолчанию Root). Оно станет именем самого внешнего типа — например User, Order, Response.
  3. Вставьте JSON в левую панель. Сгенерированный код появится в реальном времени справа; строка состояния сообщит об ошибках (некорректный JSON, пустой ввод).
  4. Нажмите Копировать, чтобы забрать код в буфер.
  5. Пример загружает вложенный объект с подобъектом и массивом; Очистить сбрасывает обе панели.

Ключевые возможности#

  • Четыре целевых языка. Интерфейсы TypeScript, классы Java, структуры Go и классы C# — один ввод, четыре вывода, переключаются выпадающим списком.
  • Вывод схемы, а не буквальная расстановка типов. Вложенные объекты становятся именованными типами; массивы объектов дают именованный тип элемента, а не непрозрачный список any.
  • Объединение разнородных массивов. Когда элементы массива имеют разные поля, выведенный тип — это объединение, что полезно для «грязных» реальных ответов, где не у каждого элемента есть каждый ключ.
  • Идентификаторы корректны, ключи верны. Ключи, недопустимые как идентификаторы, очищаются, а исходный ключ сохраняется как аннотация сериализации (@JsonProperty, тег Go json:, JsonPropertyName), поэтому исходный JSON всё равно правильно десериализуется.
  • В реальном времени и локально. Генерация идёт в вашем браузере по мере ввода или переключения опций; данные не покидают страницу.

Разбор примера#

Загрузите Пример с Языком TypeScript и Именем корня Root — вводом будет:

{
  "id": 1,
  "name": "Ada",
  "active": true,
  "address": { "city": "London", "zip": "NW1" },
  "tags": ["math", "logic"]
}

Генератор выдаёт два интерфейса — корневой и именованный тип Address для вложенного объекта:

export interface Root {
  id: number;
  name: string;
  active: boolean;
  address: Address;
  tags: Array<string>;
}

export interface Address {
  city: string;
  zip: string;
}

Переключите язык на Go, и тот же ввод становится структурами с тегами json:, сохраняющими исходные ключи:

package model

type Root struct {
  Id       float64   `json:"id"`
  Name     string    `json:"name"`
  Active   bool      `json:"active"`
  Address  Address   `json:"address"`
  Tags     []string  `json:"tags"`
}

type Address struct {
  City  string  `json:"city"`
  Zip   string  `json:"zip"`
}

Обратите внимание, как id — JSON-число — попадает в number в TypeScript и float64 в Go: генератор не угадывает целое против плавающей точки, потому что сам JSON их не различает.

FAQ#

Почему моё целочисленное поле типизировано как float64 / Double / double?#

Потому что у JSON один числовой тип и нет способа отличить 5 от 5.0. Генератор отображает каждое JSON-число в общий числовой тип целевого языка — number в TypeScript, Double в Java, float64 в Go, double в C# — поэтому тип всегда достаточно широк, чтобы вместить любое возможное значение. Если вы знаете, что поле всегда целое, сузьте его до int / Long / int64 вручную после.

Что происходит, когда объекты моего массива имеют не все одинаковые поля?#

Их формы объединяются. Массив вроде [{ "a": 1 }, { "a": 2, "b": "x" }] даёт один тип элемента с обоими полями a и b, поэтому единственный тип покрывает каждый элемент. Если два элемента не согласны по типу поля несовместимым образом (скажем, тут число, а там строка), это поле деградирует до any / Object, а не выбирает одну сторону и не ошибается относительно другой.

Поле в моём JSON содержит дефис, как first-name. Это сломается?#

Нет. Генератор превращает first-name в корректный идентификатор (firstName) для имени поля и выдаёт аннотацию сериализации, фиксирующую исходный ключ, — @JsonProperty("first-name") в Java, тег json:"first-name" в Go, [JsonPropertyName("first-name")] в C# и ключ в кавычках "first-name" в TypeScript. Поэтому сгенерированный код десериализует исходный JSON без изменений.

Что инструмент делает со значением null?#

Поле со значением null трактуется как неизвестный тип. В TypeScript оно становится опциональным any (field?: any;); в Java и C# — Object / object; в Go — interface{}. Это намеренный сигнал: null ничего не говорит о том, что хранит поле, когда оно присутствует, поэтому генератор отказывается угадывать и оставляет его вам.