处理HTTP请求正文中的可选JSON字段

时间:2015-12-02 21:54:35

标签: json go

我有这样的结构:

type MyStruct struct {
    Name  string `json:"name"`
    Age   int    `json:"age"`
    Email string `json:"email"`
} 

然后我有一些值(可能是默认值,这意味着我不需要更新此值)作为HTTP请求数据输入。我注意到生成的JSON主体将始终包含所有三个字段(nameageemail),即使我不需要更新所有字段。像这样:

{
  "name":"Kevin",
  "age":10,
  "email":""
}

有没有办法让Marshal让JSON主体不包含所有具有相同结构的字段?例如:

{
  "name":"kevin"
}

1 个答案:

答案 0 :(得分:32)

您想使用omitempty选项

type MyStruct struct {
    Name  string `json:"name,omitempty"`
    Age   int    `json:"age"`
    Email string `json:"email,omitempty"`
}

如果您希望Age也是可选的,则必须使用指针,因为int的零值实际上并不是空的"

type MyStruct struct {
    Name  string `json:"name,omitempty"`
    Age   *int   `json:"age,omitempty"`
    Email string `json:"email,omitempty"`
}