我有一个这样的结构:
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(使用前将#替换为@)