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

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

DDD
发布: 2024-12-09 07:49:05
原创
1022 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板