Конвертер JSON в структуры Go
Преобразуйте JSON в структуры Go с тегами json, а также вспомогательными функциями Unmarshal и Marshal на базе encoding/json.
Генерация структур Go с тегами json из JSON
В Go для каждого декодируемого JSON-объекта нужна структура, а каждому полю — тег json, если ключ не совпадает с именем в Go. Конвертер напишет эти структуры за вас: ключи в snake_case, например allowed_origins, превращаются в экспортируемые поля вроде AllowedOrigins с соответствующим тегом json, вложенные объекты становятся отдельными типами struct, целые числа — int64, а дробные — float64. Также добавляются функция Unmarshal и метод Marshal на основе стандартного пакета encoding/json, так что сторонние зависимости не нужны.
Как пользоваться
- Вставьте пример JSON — например, файл конфигурации или ответ API.
- Введите имя корневой структуры, например ServerConfig.
- Скопируйте код в файл .go, замените package main на имя своего пакета и декодируйте данные через json.Unmarshal или сгенерированную функцию Unmarshal.
Часто задаваемые вопросы
- Почему числа генерируются как int64, а не int?
- В JSON нет ограничения на размер целых чисел, поэтому int64 — безопасный выбор на любой платформе. Если вы знаете диапазон значений, после копирования можно заменить тип поля на int.
- Как добавить omitempty в теги json?
- Генератор пишет простые теги, соответствующие ключам из примера. Добавьте ,omitempty вручную к полям, которые при Marshal нужно пропускать, если они пустые; на декодирование это никак не влияет.
- Как обрабатываются nullable- и отсутствующие поля?
- Если в примере поле равно null или отсутствует в части элементов массива, оно генерируется как указатель, например *string, чтобы можно было отличить отсутствующее значение от пустого.
Пример: JSON в Go
Исходный JSON
{
"host": "0.0.0.0",
"port": 8080,
"debug": false,
"allowed_origins": ["https://jsonkit.org"],
"database": { "dsn": "postgres://localhost/app", "max_conns": 20 }
}Сгенерированный код: Go (ServerConfig)
// Code generated from JSON Schema using quicktype. DO NOT EDIT.
// To parse and unparse this JSON data, add this code to your project and do:
//
// serverConfig, err := UnmarshalServerConfig(bytes)
// bytes, err = serverConfig.Marshal()
package main
import "encoding/json"
func UnmarshalServerConfig(data []byte) (ServerConfig, error) {
var r ServerConfig
err := json.Unmarshal(data, &r)
return r, err
}
func (r *ServerConfig) Marshal() ([]byte, error) {
return json.Marshal(r)
}
type ServerConfig struct {
Host string `json:"host"`
Port int64 `json:"port"`
Debug bool `json:"debug"`
AllowedOrigins []string `json:"allowed_origins"`
Database Database `json:"database"`
}
type Database struct {
DSN string `json:"dsn"`
MaxConns int64 `json:"max_conns"`
}