首页 >后端开发 >Golang >如何在 Go 的 json.Marshal 中省略空嵌套结构?

如何在 Go 的 json.Marshal 中省略空嵌套结构?

DDD
DDD原创
2024-12-09 07:49:051054浏览

How to Omit Empty Nested Structs in Go's `json.Marshal`?

golang json marshal:如何省略空嵌套结构

在复杂的 JSON 编码场景中,可能会遇到应该省略的嵌套空结构也被编码的情况出于空间和效率的目的。例如,考虑以下代码片段:

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

当 json.Marshal 用于具有空 A 字段的 Total 实例时,它仍然出现在输出 JSON 中:

group := Total{
    A: ColorGroup{},  // An empty ColorGroup instance
}

json.Marshal(group) // Output: {"A":{"Name":"","Colors":null},"B":null}

期望的结果是完全省略 A 字段:

{"B":null}

解决方案:利用指针类型

解决这个问题的关键在于指针的使用。如果 Total 中的 A 字段声明为指针,则在未显式赋值时会自动设置为 nil,解决了空结构编码的问题:

type ColorGroup struct {
    ID     int `json:",omitempty"`
    Name   string
    Colors []string
}
type Total struct {
    A *ColorGroup `json:",omitempty"`  // Using a pointer to ColorGroup
    B string     `json:",omitempty"`
}

经过此修改,json.Marshal 输出现在将正确省略空 A 字段:

group := Total{
    B: "abc",  // Assigning a value to the B field
}

json.Marshal(group) // Output: {"B":"abc"}

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

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