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

  1. Вставьте образец JSON в поле Входной JSON (либо нажмите Загрузить пример или Открыть файл).
  2. Задайте Имя корневого типа (по умолчанию Root).
  3. Оставьте или снимите Добавлять omitempty к необязательным и nullable-полям.
  4. Скопируйте сгенерированный код 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.

Что сделать дальше

Форматирование JSON
Форматируйте JSON с отступом в 2 или 4 пробела либо табуляцией, сортируйте ключи и узнавайте точную строку и столбец ошибки. Работает в браузере.
Экранирование строк
Один инструмент для экранирования и обратного преобразования строк для JSON, JavaScript, HTML, XML, компонентов URL, регулярных выражений, SQL, CSS и аргументов оболочки.
Минификатор JSON
Минифицируйте JSON, удаляя все незначимые пробелы и сохраняя значения, порядок ключей и большие числа. Показывает экономию размера. В браузере.
Поиск пути в JSON
Выведите все пути документа JSON в синтаксисе JSONPath, JavaScript или jq, нажмите на путь, чтобы увидеть значение, или введите путь для поиска. В браузере.
Сравнение JSON
Сравните два JSON-документа по структуре: добавленные, удалённые и изменённые значения по JSONPath, без учёта порядка ключей и форматирования. В браузере.
Запросы JSON (JSONPath)
Запросы к JSON через JSONPath: подстановки, рекурсивный поиск, срезы и фильтры вида [?(@.price < 10)]. Результат обновляется по мере ввода. Это не jq.

Другие категории