小编典典

如何不在Go中将空结构编组为JSON?

go

我有一个这样的结构:

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,但这无效。

如何获取JSON包以 封送我的字段为空结构?


阅读 278

收藏
2020-07-02

共1个答案

小编典典

正如文档所说,“任何零指针”。-使结构成为指针。指针具有明显的“空”值: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,则将需要指针来构造值以填充它,如下所示:

Data: &MyStruct{ /* values */ }
2020-07-02