web-dev-qa-db-ja.com

ネストされた構造体をJSONにマーシャリングする

ネストされた構造体をJSONにマーシャリングするにはどうすればよいですか?ネストされた構造体なしで構造体をマーシャリングする方法を知っています。しかし、JSON応答を次のようにしようとすると:

{"genre": {"country": "taylor Swift", "rock": "aimee"}}

問題が発生しました。

私のコードは次のようになります:

行く:

type Music struct {
  Genre struct { 
    Country string
    Rock string
  }
}

resp := Music{
  Genre: { // error on this line.
    Country: "Taylor Swift",
    Rock: "Aimee",
  },
}

js, _ := json.Marshal(resp)
w.Write(js)

しかし、私はエラーが出ます

Missing type in composite literal

どうすれば解決できますか?

13
user3918985

これがあなたのタイプの複合リテラルです:

resp := Music{
    Genre: struct {
        Country string
        Rock    string
    }{ 
        Country: "Taylor Swift",
        Rock:    "Aimee",
    },
}

遊び場の例

リテラルで匿名型を繰り返す必要があります。繰り返しを避けるために、ジャンルのタイプを定義することをお勧めします。また、フィールドタグを使用して、出力で小文字のキー名を指定します。

type Genre struct {
  Country string `json:"country"`
  Rock    string `json:"rock"`
}

type Music struct {
  Genre Genre `json:"genre"`
}

resp := Music{
    Genre{
        Country: "Taylor Swift",
        Rock:    "Aimee",
    },
}

遊び場の例

22
Cerise Limón

JsonUtilsを使用します。 jsonファイルからGo構造を生成するプログラムです。
https://github.com/bashtian/jsonutils

3
Karl

構造体の値にjsonパラメータを設定しないのはなぜですか? https://play.golang.org/p/n6aJdQgfom

1
Josh