Golang Json 序列化时如何忽略零值字段

844 阅读1分钟

在 Go 中,omitempty 标签只适用于空或零值的字段,当字段的值为 nil、0、空字符串或空数组等零值时才会省略该字段。而对于结构体类型,只有当该字段为 nil 时才会忽略,而不会因为结构体所有字段都为零值就忽略该字段。

在这种具体情况下,下面这个选择可以达到你的需求:

  1. 你可以改变你的结构体字段类型为 pointer to struct,这样使用 omitempty 时,如果指针为 nil,这个字段就会被省略。

修改后的代码可能如下:

type GiftContent struct { 
    LowGift *SingleGift    `json:"low_gift,omitempty"` 
    MiddleGift *SingleGift `json:"middle_gift,omitempty"` 
    HighGift *SingleGift   `json:"high_gift,omitempty"` 
}