使用omitempty在嵌套结构中将0 / False编组为json

时间:2017-09-27 15:23:08

标签: json go struct

当将结构编组为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
}

1 个答案:

答案 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.

来自documentation

{{1}}

措辞可能更好,但在这种情况下为空意味着没有为该字段分配任何内容。这并不意味着如果字段按字面设置为0或false,则它将为空。 False和0也是值,如果您指定它们,则该字段变为0或false。