Имена ключевых слов 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{} и закодировать это.