首页 >后端开发 >Golang >如何在 Go 的 JSON 封送处理中省略空嵌套结构?

如何在 Go 的 JSON 封送处理中省略空嵌套结构?

Susan Sarandon
Susan Sarandon原创
2024-12-13 22:21:16276浏览

How to Omit Empty Nested Structs in Go's JSON Marshaling?

在 JSON 编组中省略空嵌套结构

上下文:

Go 中的 JSON 编组可以将结构转换为 JSON 对象。默认情况下,所有导出的结构字段都包含在 JSON 输出中。但是,可以通过指定 :",omitempty" 作为字段标记来省略空字段。

问题:

如果嵌套结构为空(即具有零)其所有字段的值),即使它具有 :",omitempty",它仍可能出现在 JSON 输出中

解决方案:

要省略空嵌套结构,需要使用指向结构的指针。通过这样做,嵌套结构体的空值将被视为 nil 指针。

解释:

来自 Go 文档:

  • 结构体值编码为 JSON 对象。空值包括 nil 指针。
  • omitempty 标签适用于空值,包括 nil 指针。

因此,通过使用指向嵌套结构的指针,我们确保它被考虑空值,因此当 :",omitempty" 标签为空时,会从 JSON 输出中省略使用过。

示例:

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}

type Total struct {
    A *ColorGroup `json:",omitempty"`
    B string     `json:",omitempty"`
}

// Empty nested struct (zero values)
group := Total{
    B: "abc",
}

// Marshal group without nested struct (only "B" field included)
b, err := json.Marshal(group)
if err != nil {
    fmt.Println("error:", err)
}
os.Stderr.Write(b)

以上是如何在 Go 的 JSON 封送处理中省略空嵌套结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn