JSON omitempty会忽略非空值。

huangapple go评论81阅读模式
英文:

JSON omitempty omitting non-empty values

问题

这可能是因为在结构体定义中,UsernamePassword 字段的 json 标签被设置为 omitempty。这意味着如果它们的值为 nil 或空字符串,它们将被忽略,不会包含在 JSON 输出中。在你的示例中,UsernamePassword 字段都有非空的值,所以它们被包含在 JSON 输出中。如果你想要在 JSON 输出中包含空值字段,你可以将 omitemptyjson 标签中移除。

英文:

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的消息。一旦您放置了唯一的值(如userpass),一切都会正常工作。

这是正确的(没有重复的结构标签)

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"`

huangapple
  • 本文由 发表于 2021年8月18日 22:15:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/68834110.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定