当将结构编组为JSON时,我能够为其分配一个变量,即相应的"空值"并且即使在使用omitempty时仍然传递它,但是我无法在嵌套结构中实现相同的结果,因为尽管它是一个指针,它仍然被省略。这可能吗?
type Foo struct {
Bar Bar `json:"bar,omitempty"`
A *int `json:"a,omitempty"` //Does not get omitted when a = 0
B *bool `json:"b,omitempty"` //Does not get omitted when b = false
}
type Bar struct {
X *int `json:"x,omitempty"` //Gets omitted when x = 0
Y *bool `json:"y,omitempty"` //Gets omitted when y = false
}
答案 0 :(得分:1)
那是因为它们不是空的..你将它们设置为0 / false。 0 / false并不意味着它们不在那里,你通过为它们分配一个值来给予内存空间。
The "omitempty" option specifies that the field should be omitted from the encoding if the field has an empty value, defined as false, 0, a nil pointer, a nil interface value, and any empty array, slice, map, or string.
{{1}}
措辞可能更好,但在这种情况下为空意味着没有为该字段分配任何内容。这并不意味着如果字段按字面设置为0或false,则它将为空。 False和0也是值,如果您指定它们,则该字段变为0或false。