如何使用 Go 不将空结构封送到 JSON 中?

2024-03-07

我有一个这样的结构:

type Result struct {
    Data       MyStruct  `json:"data,omitempty"`
    Status     string    `json:"status,omitempty"`
    Reason     string    `json:"reason,omitempty"`
}

但即使 MyStruct 的实例完全为空(意味着所有值都是默认值),它也会被序列化为:

"data":{}

我知道编码/json http://golang.org/pkg/encoding/json/#Marshal文档指定“空”字段是:

false、0、任何 nil 指针或接口值以及任何数组, 切片、映射或长度为零的字符串

但不考虑具有所有空/默认值的结构。它的所有字段也都标记为omitempty,但这没有效果。

如何获取 JSON 包not编组我的字段是一个空结构?


正如文档所说,“任何零指针”。 -- 使结构体成为指针。指针具有明显的“空”值:nil.

修复 - 使用结构定义类型pointer field:

type Result struct {
    Data       *MyStruct `json:"data,omitempty"`
    Status     string    `json:"status,omitempty"`
    Reason     string    `json:"reason,omitempty"`
}

然后是这样的值:

result := Result{}

将编组为:

{}

说明:注意*MyStruct在我们的类型定义中。 JSON 序列化并不关心它是否是指针——这是运行时细节。因此,将结构体字段转换为指针仅对编译和运行时有影响)。

请注意,如果您确实更改了字段类型MyStruct to *MyStruct,您将需要指向结构值的指针来填充它,如下所示:

Data: &MyStruct{ /* values */ }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Go 不将空结构封送到 JSON 中? 的相关文章

随机推荐