将嵌套结构体编组为JSON

20

我该如何将嵌套的结构体编组成JSON?我知道如何编组不包含嵌套结构体的结构体。但是,当我尝试使JSON响应看起来像这样时:

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

我遇到了问题。

我的代码长这样:

Go:

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)

然而,我遇到了错误

复合字面值中缺少类型

我该如何解决?

3个回答

37

这是您类型的复合字面量:

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

playground示例

您需要在文字中重复匿名类型。为了避免冗余,我建议为Genre定义一个类型。还可以使用字段标签指定输出中的小写键名。

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",
    },
}

可运行示例


非常有帮助。按预期工作。 - vivekyad4v

4

1

在你的GO Playground示例中,你能加上一些注释吗? - FilBot3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接