お元気そうで残念です

仕事とか趣味のメモを残します

埋め込み構造体をjsonに変換したときに埋め込み構造体の構造体名を残して欲しい

Go言語の分からない部分についてのぼやき.

以下のように構造体を定義していたとする.

type User struct {
        Name string `json:"name"`
        Id   int    `json:"id"`
        Status
}

type Status struct {
        Power int `json:"power"`
        Speed int `json:"speed"`
}

以下のようにjson.Marshalを使って構造体を分割して出力すると

func main () {
        s1 := Status{5, 6}
        user1 := User{"hoge", 1, s1}
        user1.Status = s1
        j, _ := json.Marshal(user1)
        var buf bytes.Buffer
        buf.Write(j)
        os.Stdout.Write(j)
}

このように出力されるけど,

{"name":"hoge","id":1,"power":5,"speed":6}

できれば下のように出力して欲しい場面があった(送信先で構造体に戻したいときとか)

{"name":"hoge","id":1,"status":{"power":5,"speed":6}}

調べたらありそうな気がするけど,良い調べ方がわからなかった....

とりあえずメモっておく.


追記

type User struct {
Name string `json:"name"`
Id int `json:"id"`
Status `json:"status"`
}

で普通にできた