Генерация типов

JSON в Goмодели на основе реальных ответов

Сравните две записи примера. Результат содержит объявление пакета и только необходимые импорты.

JSON в Go

Ввод JSON

Разбор и генерация выполняются в браузере. Ввод не отправляется и не сохраняется.

Результат Go

Параметры генерации

Числа в any требуют Decoder.UseNumber(). Указатели не различают отсутствие и null.

Объявлений: 3 · типов указателей: 2

JSON в Go помогает подготовить модель по ответам API. Поместите несколько записей в массив, чтобы учесть отсутствующие поля, null и изменения типов.

Пример не доказывает обязательность полей и не описывает бизнес-правила. Сверьте результат с контрактом API и проверьте декодирование в проекте.

Зачем использовать JSON в Go?

Учитывать каждую запись

JSON в Go рассматривает все элементы в одной позиции массива. Поле, появившееся только во второй записи, тоже попадёт в модель. Для известного типа при null или отсутствии можно получить указатель.

Две карточки с разными полями сходятся в полную структуру; пустые маркеры обозначают отсутствующие значения.

Выбирать тип до округления

Обычные целые токены в диапазоне int64 получают int64. Дроби, экспоненты и большие целые получают json.Number. Генератор не переводит их предварительно в числа JavaScript с плавающей точкой.

Длинная последовательность числовых блоков целиком переходит в соответствующие ячейки выходной структуры.

Проверить модель перед сохранением

01

Добавьте характерные варианты

Объедините записи одного формата ответа в массив. Похожие объекты в разных свойствах получают независимые вложенные структуры, а не общий тип по совпадению формы.

02

Выберите допустимые предположения

Отключите распознавание дат, если нужен исходный текст. Без именованных вложенных типов получатся анонимные структуры. Отключение тегов лишает модель привязки к исходным ключам.

03

Обновите результат после изменений

Автоматическая генерация ждёт 350 мс. Отключите её для кнопки генерации или используйте Ctrl/Cmd+Enter. Изменения блокируют копирование и скачивание до успешного обновления.

Имена полей и типы значений

Экспортируемые имена и ключи

Этот конвертер JSON преобразует snake_case и camelCase в экспортируемые ASCII-имена. Сокращения вроде ID остаются прописными; совпадения разрешаются числовыми суффиксами. Включённые json-теги сохраняют поддерживаемые ключи.

Указатели при известном типе

Известный скаляр или структура получает указатель, если поле отсутствует или содержит null в примере. Срезы и отображения уже допускают nil. Только null даёт any; указатель не различает отсутствие и явный null.

Числовая запись влияет на тип

Лишь обычные целые токены в знаковом 64-битном диапазоне становятся int64. Даже 1.0 и 1e3 дают json.Number: encoding/json не декодирует такую запись непосредственно в целое. Перед вычислениями проверяйте ошибки преобразования Number.

Вложенность и корректные даты

Полные корректные метки RFC3339 с дробной частью до девяти цифр могут стать time.Time. Все ненулевые строки в этой позиции должны подходить. Псевдонимы корневых типов сохраняют методы исходного типа.

Границы и совместимость

Исходный код для Go 1.18 и новее
Используются any и теги, совместимые с encoding/json v1. Не создаются собственные UnmarshalJSON, валидаторы, omitempty, преобразования Schema или готовые приложения. Запустите gofmt и тесты в своём проекте.
Не любой ключ представим тегом
Пустые ключи, запятые, кавычки, обратные слеши, обратные кавычки, управляющие символы и эмодзи дают ошибку с путём при включённых тегах. Используйте отображение или свой декодер. Ключ - поддерживается тегом -, чтобы поле не игнорировалось.
Обобщённые типы требуют настройки
Несовместимые типы дают any, пустые массивы — []any, пустые объекты — map[string]any. Для чисел в таких позициях вызывайте Decoder.UseNumber(): по умолчанию используется float64. Генерация модели не меняет настройку декодера.
Время не сохраняет каждую букву
Некорректные даты, дата без времени, отсутствие зоны и более девяти дробных цифр остаются string. Повторное кодирование time.Time может нормализовать зону и конечные нули. Для точного текста отключите распознавание дат.
Строгий ввод и конечные лимиты
Комментарии, повторные ключи, завершающие запятые и несколько документов отклоняются. Нет загрузки URL, импорта файлов и исправления. Лимиты: 500 000 символов ввода, глубина 100, 50 000 узлов, 1 000 объявлений и 1 000 000 символов вывода.

Вопросы о JSON в Go

Какие типы Go соответствуют значениям JSON?

Строки обычно дают string, логические значения — bool, простые целые в диапазоне — int64, прочие числа — json.Number. Корректные полные даты могут стать time.Time. Несовместимые значения дают any.

Почему ключ user_id даёт экспортированное имя поля?

Имя преобразуется в UserID: оно начинается с прописной буквы и сохраняет известное сокращение ID. Числовые суффиксы устраняют совпадения. Теги связывают экспортируемые поля с поддерживаемыми исходными ключами.

Как объединяются объекты с разными полями в массиве?

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

Какой тип получают null и несовместимые значения?

Только null или несовместимые типы дают any. Известный скаляр или структура вместе с null может дать указатель. Он позволяет отличить nil от нулевого значения, но не отсутствие от явного null.

Нужно ли проверять сгенерированные типы перед использованием?

Да. JSON в Go строит черновик только по переданным примерам. Невидимые поля, будущие ответы и бизнес-ограничения остаются за пределами вывода. Проверьте модель реальными данными и тестами проекта.

Есть случай для улучшения вывода типов?

Начните с реального ответа

Используйте JSON в Go с несколькими записями, проверьте указатели, числа и даты, затем экспортируйте модель для тестирования.