即使在 omitempty 标签中也有空结构

Got empty struct even in omitempty tag

我对内联使用了相同的结构,并使用 omitempty 标记嵌套在主结构中。因为我没有在键中分配任何值,所以我在 JSON 中得到了空结构。在这种情况下,有人可以帮助我吗?

package main

import (
    "encoding/json"
    "fmt"
)

type Customer struct {
    Name              string `json:"name,omitempty" bson:"name"`
    Gender            string `json:"gender,omitempty" bson:"gender"`
    Address           `json:",inline" bson:",inline" `
    OptionalAddresses []Address `json:"optionalAddresses,omitempty" bson:"optionalAddresses"`
}

type Address struct {
    Country    string `json:"country,omitempty" bson:"country"`
    ZoneDetail Zone   `json:"zone,omitempty" bson:"zone"`
}

type Zone struct {
    Latitude  float64 `json:"lat,omitempty" bson:"lat,omitempty"`
    Longitude float64 `json:"lon,omitempty" bson:"lon,omitempty"`
}

func main() {
    cust := Customer{Name: "abc", Gender: "M"}

    dataByt, _ := json.Marshal(cust)
    fmt.Println(string(dataByt))
}

输出:

{"姓名":"abc","性别":"M","区域":{}}

https://go.dev/play/p/aOlbwWelBS3

'omitempty' 如果字段值为空,则省略该字段。但是在 Golang 中,我们没有结构的空值,您可以使用指向结构的指针(在您的情况下为 *Zone)。

...

type Address struct {
    Country    string `json:"country,omitempty" bson:"country"`
    ZoneDetail *Zone   `json:"zone,omitempty" bson:"zone"`
}

...