如上面的代码所示,可以使用 json:",omitempty"
省略结构中的某些字段以出现在 json 中。
例如
type ColorGroup struct {
ID int `json:",omitempty"`
Name string
Colors []string
}
type Total struct {
A ColorGroup`json:",omitempty"`
B string`json:",omitempty"`
}
group := Total{
A: ColorGroup{},
}
在这种情况下, B
不会出现在 json.Marshal(group)
然而,如果
group := Total{
B:"abc",
}
A
仍然出现在 json.Marshal(group)
{"A":{"Name":"","Colors":null},"B":"abc"}
问题是我们怎么才能得到
{"B":"abc"}
编辑:谷歌搜索后,这里建议 使用 pointer ,换句话说,将 Total
变成
type Total struct {
A *ColorGroup`json:",omitempty"`
B string`json:",omitempty"`
}
原文由 Zhe Hu 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 文档中:
在
group
的声明中,隐含的是group.A
将是ColorGroup
结构类型的零值。请注意,在被视为“空值”的事物列表中未提及结构类型的零值。如您所见,您的案例的解决方法是使用指针。如果您在
A
group
这将起作用。如果您将它指定为指向零结构的指针,那么它将再次出现。游乐场链接: