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

Вставьте JSON-объект, и вы получите для него структуры Go: одну структуру на каждый объект, слайс на каждый список и тег json, который сохраняет каждое имя так, как оно записано.

Бесплатно Работает в браузере Проверено четверг, 12 ноября 2026 г.

Весь JSON-текст, с фигурными скобками наверху. Имена сохраняют порядок, а числа сохраняют свои цифры. Ничего не отправляется и не сохраняется.

Имя внешней структуры. Используйте буквы, цифры и подчёркивания, начинайте с буквы.

Добавляет параметр omitempty, поэтому encoding/json не записывает поле в вывод, если оно пустое.

Результат

Код на Go — Скопируйте его или скачайте как models.go.
Проверка — Зелёным, когда JSON преобразован. Красным: называет место и причину.
Код на Go

Этот инструмент работает в вашем браузере. То, что вы вводите, нам не отправляется.

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

  1. Вставьте JSON-объект в поле JSON-объект. Весь текст должен быть одним объектом с фигурными скобками наверху.
  2. Введите Имя корневой структуры, например Product, и отметьте Добавить omitempty ко всем тегам, если нужна эта опция.
  3. Прочитайте Проверка. Зелёный цвет означает, что объект преобразован; красный называет место, где проблема.
  4. Скопируйте Код на Go в файл с объявлением пакета или скачайте его как models.go.

Как выбираются типы Go

Каждое значение JSON получает тип Go, который его хранит. Строка становится string, а true и false становятся bool. Правила Unmarshal в encoding/json определяют, как JSON читается обратно в эти типы.

  • Целое число, которое помещается в 64 бита, становится int64. Число с точкой или экспонентой, например 1.0 или 2e3, становится float64, и так же становится целое число, слишком большое для int64.
  • null становится any. Null рядом со значением другого типа принимает этот тип, потому что null оставляет значение Go другого типа без изменений.
  • Объект становится структурой, а список получает тип, общий для его элементов. Объекты в одном списке сливаются в одну структуру, а список смешанных типов становится []any.
  • Пустой объект становится пустой структурой, а пустой список — []any.

Имена, теги и совпадения

Каждое поле берёт имя из имени JSON: слова соединяются, и каждое начинается с заглавной буквы, поэтому user-name становится UserName. Спецификация Go экспортирует поле, имя которого начинается с заглавной буквы, поэтому первая буква делается заглавной. Тег json сохраняет имя так, как оно записано, поэтому тот же ключ совпадает при чтении JSON обратно.

Два имени, которые дают одно и то же имя Go, получают номер, например AB и AB2, а структура, чьё имя уже занято, тоже получает номер. Элемент списка называется по своему списку: products даёт структуру Product, а имя без правила множественного числа получает суффикс Item.

  • Имя с запятой, одним дефисом или без символов не может быть тегом json, поэтому инструмент называет этот ключ и останавливается.
  • При включённом omitempty каждый тег получает этот параметр. Инструмент делает заглавной первую букву имени корневой структуры, поэтому product становится Product.

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

  • Не добавляет объявление пакета и импорты. Вставьте код в файл, у которого есть собственное объявление пакета.
  • Не использует указатели для необязательных полей. Поле, которое отсутствует или равно null в JSON, не отличается от поля с нулевым значением.
  • Не меняет имена на общепринятые сокращения Go, поэтому id становится Id. Переименуйте поле вручную, если стиль вашего кода требует ID.

Пример: заказ с владельцем и двумя позициями

В JSON ниже есть целое число, десятичная дробь, объект и список из двух объектов. В таблице показано, какое поле Go получает каждое имя JSON. Инструмент записывает три структуры под таблицей, сначала внешнюю структуру Order.

Имя JSON Поле Go Тип Go Тег
id Id int64 json:"id"
ratio Ratio float64 json:"ratio"
owner Owner Owner json:"owner"
items Items []Item json:"items"

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

Почему целое число становится int64, а не int?

Тип int64 — это 64-битное целое со знаком, и он хранит любое целое от −9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Инструмент использует его для каждого целого, которое в него помещается, чтобы значение не переполнилось. Если вашему коду нужен int, замените тип вручную.

Почему null становится any?

В Go нет типа, который сам по себе хранит null, поэтому инструмент использует any, который хранит любое значение. Null рядом со значением другого типа принимает этот тип, потому что encoding/json оставляет значение Go другого типа без изменений, когда читает null.

Почему моё поле называется Id, а не ID?

Инструмент делает заглавной первую букву каждого слова и не применяет общепринятые сокращения Go, поэтому id становится Id. Тег json по-прежнему читает id, поэтому данные читаются так же. Переименуйте поле, если стиль вашего кода требует ID.

Какая версия Go нужна для результата?

Результат использует any для null, а any — это псевдоним interface{}, добавленный в Go 1.18. Если ваш код старше, замените any на interface{}: это один и тот же тип.

Почему инструмент отказывается от некоторых имён?

Тег json содержит имя, за которым идут параметры, начинающиеся после запятой, поэтому имя с запятой нельзя записать в теге. Тег с одним дефисом скрывает поле, поэтому такое имя тоже отклоняется.

Отправляется ли вставленный JSON куда-нибудь?

Нет. Преобразование выполняется в вашем браузере, и ничего из вставленного не сохраняется и не отправляется на наш сервер. Не вставляйте пароль или токен ни на одну страницу, которой не доверяете.

Источники

Цифры и текст в последний раз проверены четверг, 12 ноября 2026 г..

Мы используем необходимые cookie, чтобы сайт работал. С вашего согласия Google также использует рекламные cookie, чтобы показывать персонализированную рекламу. Если вы откажетесь, реклама всё равно будет показываться, но не будет персонализированной.