web-dev-qa-db-ja.com

GoのJSON Marshalを使用した小文字のJSONキー名

"encoding/json"パッケージを使用して、アプリケーションのインポートされたパッケージの1つで宣言された構造体をマーシャリングしたいと思います。

例えば。:

type T struct {
    Foo int
}

インポートされるため、構造体で使用可能な(エクスポートされた)フィールドはすべて大文字で始まります。しかし、小文字のキー名を持ちたいです:

out, err := json.Marshal(&T{Foo: 42})

になります

{「フー」:42}

しかし、私は取得したい

{"foo":42}

簡単な方法で問題を回避することは可能ですか?

150
ANisus

encoding/json.Marshal のドキュメントをご覧ください。 struct fieldタグを使用して、生成されたjsonのフォーマットを決定する方法について説明します。

例えば:

type T struct {
    FieldA int    `json:"field_a"`
    FieldB string `json:"field_b,omitempty"`
}

これにより、次のようにJSONが生成されます。

{
    "field_a": 1234,
    "field_b": "foobar"
}
236
jimt

エクスポートするキーを使用して独自の構造体を作成し、小文字の名前に適切なjsonタグを付けることができます。次に、目的の構造体をJSONにエンコードする前に自分の構造体にコピーできます。または、ローカル構造体の作成に煩わされたくない場合は、おそらくmap[string]interface{}そしてそれをエンコードします。

7
Lily Ballard