Конвертировать JSON в структуры Go — Numio
Генерирует определения структур Go из JSON с помощью порта json-to-go и форматирует их gofmt. Ключи становятся экспортируемыми полями в CamelCase с тегами json:"..."; вложенные объекты становятся встроенными анонимными структурами, а null — any.
Написать структуру для json.Unmarshal ответа стороннего REST API.
Когда пригодится
- Написать структуру для json.Unmarshal ответа стороннего REST API.
- Подготовить типы запросов и ответов для HTTP-обработчика на Go по примерам payload.
Как пользоваться
- Вставьте JSON-объект или массив в левый редактор.
- Изучите сгенерированную структуру; корневой тип всегда называется AutoGenerated.
- Скопируйте её в свой пакет, переименуйте тип и вынесите встроенные структуры в именованные типы, если используете их повторно.
JSON
{
"id": 42,
"user_name": "ada",
"score": 9.5,
"active": true,
"deleted_at": null,
"tags": ["go", "json"],
"address": { "city": "Tokyo", "zip": "100-0001" }
}Структура Go
type AutoGenerated struct {
ID int `json:"id"`
UserName string `json:"user_name"`
Score float64 `json:"score"`
Active bool `json:"active"`
DeletedAt any `json:"deleted_at"`
Tags []string `json:"tags"`
Address struct {
City string `json:"city"`
Zip string `json:"zip"`
} `json:"address"`
}Подробности и ограничения
Генерация выполняется в браузере. Настроек для имени типа, встроенных или именованных структур и тегов нет.
Аббревиатуры пишутся заглавными (id становится ID), snake_case превращается в CamelCase, а исходный ключ сохраняется в теге json.
Целые числа становятся int (int64 для больших значений), дробные — float64. null, пустые и смешанные массивы становятся any или []any.
Если объекты в массиве различаются, ключи, отсутствующие в некоторых из них, получают ,omitempty.
FAQ
Можно ли преобразовать JSON-массив на корневом уровне?
Да. Получается type AutoGenerated []struct{...}, в котором объединены поля всех объектов массива.
Почему моё поле null имеет тип any?
Значение null не несёт информации о типе. Замените any указателем, например *string или *time.Time, чтобы сохранить поддержку nil.
Генерирует ли он именованные вложенные структуры?
Нет. Вложенные объекты — встроенные анонимные структуры. Вынесите их в именованные типы вручную, если на них нужно ссылаться.