英文:
JSON omitempty omitting non-empty values
问题
这可能是因为在结构体定义中,Username
和 Password
字段的 json
标签被设置为 omitempty
。这意味着如果它们的值为 nil 或空字符串,它们将被忽略,不会包含在 JSON 输出中。在你的示例中,Username
和 Password
字段都有非空的值,所以它们被包含在 JSON 输出中。如果你想要在 JSON 输出中包含空值字段,你可以将 omitempty
从 json
标签中移除。
英文:
I have this struct:
type Proxy struct {
Ip string
Port string
Username string `json:"group,omitempty" bson:",omitempty"`
Password string `json:"group,omitempty" bson:",omitempty"`
}
Username
and Password
values are assigned (but they can be nil or empty, thats why i want to omit them in such case).
proxy := &Proxy{}
proxy.Ip = "1.1.1.1";
proxy.Port = "1111";
proxy.Username = "user";
proxy.Password = "pass";
However they are omitted in json
output:
json, err := json.Marshal(proxy)
if err != nil {
log.Println(err)
}
log.Println(string(str))
the log.Println(string(str))
output is following:
{"Ip":"1.1.1.1","Port":"1111"}
What could be the reason for them to be missing in JSON output?
答案1
得分: 1
您在示例https://play.golang.org/p/Um5M1R4DZ49中遇到了一个重复的结构标签 - linter go-vet的消息。一旦您放置了唯一的值(如user
和pass
),一切都会正常工作。
这是正确的(没有重复的结构标签)
Username string `json:"user,omitempty" bson:",omitempty"`
Password string `json:"pass,omitempty" bson:",omitempty"`
英文:
You have a struct tags repeated - linter go-vet message in the example https://play.golang.org/p/Um5M1R4DZ49 . Once you place unique values (like user
and pass
) everything will work
This is correct (not duplicated struct tags)
Username string `json:"user,omitempty" bson:",omitempty"`
Password string `json:"pass,omitempty" bson:",omitempty"`
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论