DevToolPal
RU

JSON в структуру Go

Генерирует структуры Go с тегами json по примеру JSON: именованные или встроенные вложенные структуры и omitempty.

Работает локально, без загрузки на сервер

Параметры

Вложенные объекты

JSON

Символов: 0 · 0 B

Go

Символов: 0 · 0 B

Что делает инструмент

Конвертер JSON в Go читает пример JSON и пишет определения структур Go с тегами json, готовые для encoding/json. Вставьте ответ API, который вы вызываете, и получите типы, которые сразу можно передать в json.Unmarshal, не выписывая вручную каждое поле и тег.

Конвертер проверяет каждое значение в примере. Вложенные объекты становятся отдельными структурами, все элементы массива объединяются в один тип элемента, а поля, которых нет в некоторых элементах или которые иногда равны null, определяются как необязательные. Вывод выровнен так, как это сделал бы gofmt.

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

  1. Вставьте JSON в поле ввода, загрузите файл .json или нажмите Пример.
  2. Задайте имя корневого типа и выберите, как записывать вложенные объекты, какие поля получают omitempty и использовать ли указатели для полей, допускающих null.
  3. Скопируйте код Go или скачайте его как файл .go и добавьте строку package.

Некорректный JSON отмечается строкой и столбцом ошибки.

Пример

Этот JSON:

{ "id": 7, "user_name": "ada", "tags": ["admin"], "profile": { "avatar_url": "https://example.com/a.png" } }

превращается в такие структуры:

type Root struct {
	ID       int      `json:"id"`
	UserName string   `json:"user_name"`
	Tags     []string `json:"tags"`
	Profile  Profile  `json:"profile"`
}

type Profile struct {
	AvatarURL string `json:"avatar_url"`
}

Советы

  • Один пример показывает только то, что в нём есть. Если значение может быть числом или строкой, включите оба варианта или поместите несколько примеров в массив, чтобы они объединились.
  • Метки времени приходят строками. Замените тип на time.Time сами, если формат — RFC 3339.
  • Объекты с полностью одинаковыми полями используют одну структуру, поэтому вывод остаётся коротким, когда одна и та же форма встречается в нескольких местах.
  • Пишете и на TypeScript? Генератор JSON в TypeScript использует тот же вывод типов для интерфейсов.

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

› Как выбираются имена полей?

Каждый ключ JSON превращается в экспортируемое имя Go в PascalCase, а распространённые аббревиатуры пишутся заглавными, как ожидает golint, поэтому user_id становится UserID, а avatar_url — AvatarURL. Исходный ключ сохраняется в теге json, так что encoding/json точно сопоставляет поля.

› Какие типы Go используются?

Строки становятся string, целые числа — int (или int64, если значение не помещается в 32 бита), дробные — float64, логические значения — bool. Массивы становятся срезами, пустые объекты — map[string]any, а значения, которые бывают только null или смешивают несколько видов, — any.

› Чем отличаются именованные и встроенные структуры?

Именованный режим записывает каждый вложенный объект как отдельный тип, например Address или Order, что упрощает повторное использование и тестирование. Встроенный режим помещает анонимные типы struct прямо в родителя и держит всё в одном объявлении, как делают многие быстрые конвертеры.

› Когда добавляется omitempty?

По умолчанию только к необязательным полям, то есть к тем, что отсутствуют в некоторых объектах массива или иногда равны null. Можно также добавить его ко всем полям или ни к одному. Включите указатели, чтобы отличать отсутствующее значение или null от нулевого.

› Загружается ли мой JSON?

Нет. Структуры генерируются в браузере, и ничего не отправляется на сервер.