JSON в структуру Go
Превращайте JSON в структуры Go с экспортируемыми именами полей, тегами json, указателями для null и необязательным omitempty. Вложенные объекты и массивы. Бесплатно.
Вложенные объекты становятся отдельными структурами; nullable-значения — указателями; целые числа — int64, дробные — float64, смешанные или только null — any.
Работает полностью в вашем браузере. Ваши данные никуда не загружаются.
Похожие Инструменты
Просмотреть ВсеЧто такое JSON в структуру Go?
Создаёт идиоматичные определения struct на Go по образцу JSON. Имена полей экспортируются в PascalCase с аббревиатурами Go (ID, URL, API…), у каждого поля есть тег json:"…" с исходным ключом, а вложенные объекты становятся отдельными именованными структурами.
Как пользоваться JSON в структуру Go
- Вставьте образец JSON в поле Входной JSON (либо нажмите Загрузить пример или Открыть файл).
- Задайте Имя корневого типа (по умолчанию
Root). - Оставьте или снимите Добавлять omitempty к необязательным и nullable-полям.
- Скопируйте сгенерированный код Go или нажмите Скачать, чтобы сохранить его в файл.
Пример
{"id":1,"name":"A","tags":["x"]} type Root struct {
ID int64 `json:"id"`
Name string `json:"name"`
Tags []string `json:"tags"`
} Когда использовать JSON в структуру Go
Используйте для разбора ответов API через encoding/json. Инструмент не создаёт особых типов для значений времени и перечислений; там, где нужно, замените string на time.Time самостоятельно.
Как работает JSON в структуру Go
Образец обходится рекурсивно, и каждая позиция собирает встреченные в ней типы. Массивы объектов объединяются в один тип: ключ, отсутствующий у части элементов, становится необязательным, ключ, который где-то равен null, получает допустимое значение null, целые числа вперемешку с дробными становятся типом с плавающей точкой, а всё остальное со смешанными типами сводится к динамическому типу. Вложенные объекты становятся собственными именованными типами (PascalCase от ключа, ключи-массивы переводятся в единственное число: orders → Order), а при совпадении имён добавляются числовые суффиксы. В Go используются int64 для целых, float64 для дробных, string, bool, срезы для массивов, указатель (*T) для значений с null и any для динамических значений или значений только null. Столбцы выравниваются, как в выводе gofmt.
Распространенные Случаи Использования
- Описание ответа REST для json.Unmarshal
- Создание структур конфигурации из файла JSON
- Ускорение написания DTO для микросервиса на Go
- Сравнение именования полей в JSON и в коде Go
Часто Задаваемые Вопросы
Почему int64, а не int?
У int64 гарантированный размер на любой платформе, что исключает сюрпризы с переполнением на больших идентификаторах. При желании замените его на int.
Когда используется указатель?
Если в образце для ключа встречается null, поле получает тип *T, чтобы отсутствующее значение можно было отличить от нулевого.
Что делает omitempty?
encoding/json пропускает поле при сериализации, если у него нулевое значение. Опция добавляет его только к полям, которые в образце необязательны или допускают null.