Как пользоваться
- Вставьте JSON-объект в поле JSON-объект. Весь текст должен быть одним объектом с фигурными скобками наверху.
- Введите Имя корневой структуры, например Product, и отметьте Добавить omitempty ко всем тегам, если нужна эта опция.
- Прочитайте Проверка. Зелёный цвет означает, что объект преобразован; красный называет место, где проблема.
- Скопируйте Код на 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 куда-нибудь?
Нет. Преобразование выполняется в вашем браузере, и ничего из вставленного не сохраняется и не отправляется на наш сервер. Не вставляйте пароль или токен ни на одну страницу, которой не доверяете.
Источники
- Go: encoding/json, правила Unmarshal и теги структур (на английском)
- Спецификация языка Go: числовые типы и any (на английском)
Цифры и текст в последний раз проверены четверг, 12 ноября 2026 г..