go - 将嵌套结构编码为 JSON

标签 go marshalling

如何将嵌套结构编码为 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)

但是,我得到了错误

复合文字中缺少类型

我该如何解决这个问题?

最佳答案

这是您的类型的复合文字:

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

playground example

您需要在文字中重复匿名类型。为了避免重复,我建议为 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",
    },
}

playground example

关于go - 将嵌套结构编码为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27676707/

相关文章:

go - 如何在 Xcode CoreFoundation 项目中链接 go 包?

go - 在 Go 中反转 slice 顺序的惯用方法(不是降序排序)?

c# - 是否有必要释放从 C# 接收到的 C++ 字符串的内存?

.net - 不正确的互操作签名导致内存泄漏

android - 编码通知包裹

database - golang 中的数据库事务

go - 如何在并行for循环中使用 channel

for-loop - for-range 构造与 Go 中的闭包有何关系?

c# - IntPtr 到字节数组并返回

Java 对象使用 Jackson 将列表扩展为 Json