我有一个这样的结构:
type Result struct { Data MyStruct `json:"data,omitempty"` Status string `json:"status,omitempty"` Reason string `json:"reason,omitempty"` }
但是,即使MyStruct实例完全为空(意味着所有值都是默认值),它也会被序列化为:
"data":{}
我知道encoding / json文档指定“空”字段为:
false,0,任何nil指针或接口值以及任何长度为零的数组,切片,映射或字符串
但不考虑具有所有空/默认值的结构。它的所有字段也都标有omitempty,但这无效。
omitempty
如何获取JSON包以 不 封送我的字段为空结构?
正如文档所说,“任何零指针”。-使结构成为指针。指针具有明显的“空”值:nil。
nil
修复-使用结构 指针 字段定义类型:
type Result struct { Data *MyStruct `json:"data,omitempty"` Status string `json:"status,omitempty"` Reason string `json:"reason,omitempty"` }
然后是一个像这样的值:
result := Result{}
将封送为:
{}
说明:请注意*MyStruct我们类型定义中的。JSON序列化并不关心它是否是指针-这是运行时详细信息。因此,将结构字段设为指针仅对编译和运行时有影响。
*MyStruct
请注意,如果确实将字段类型从更改MyStruct为*MyStruct,则将需要指针来构造值以填充它,如下所示:
MyStruct
Data: &MyStruct{ /* values */ }