Имена ключевых слов JSON с JSON Marshal в Go
Я хочу использовать пакет "encoding/json"
для маршалирования структуры, объявленной в одном из импортированных пакетов моего приложения.
Например:.
type T struct {
Foo int
}
Поскольку он импортируется, все доступные (экспортированные) поля в структуре начинаются с буквы верхнего регистра. Но я хочу иметь имена ключевых слов в нижнем регистре:
out, err := json.Marshal(&T{Foo: 42})
приведет к
{ "Foo": 42}
но я хочу получить
{ "Foo": 42}
Можно ли легко решить проблему?
Ответы
Ответ 1
Посмотрите на документы для encoding/json.Marshal.
В нем обсуждается использование тегов структурных тегов для определения способа форматирования сгенерированного json.
Например:
type T struct {
FieldA int `json:"field_a"`
FieldB string `json:"field_b,omitempty"`
}
Это приведет к созданию JSON следующим образом:
{
"field_a": 1234,
"field_b": "foobar"
}
Ответ 2
Вы можете создать свою собственную структуру с ключами, которые хотите экспортировать, и дать им соответствующие json-теги для имен нижнего регистра. Затем вы можете скопировать нужную структуру в вашу, прежде чем кодировать ее как JSON. Или, если вы не хотите беспокоиться о создании локальной структуры, возможно, вы можете сделать map[string]interface{}
и закодировать это.