存在 MyStruct 的结构。
type MyStruct struct {
Code int `json:"Code"`
Flags uint8 `json:"Flags"`
OptionField int `json:",omitempty"`
}
以下代码将其转换为json。
f := MyStruct{Code:500, OptionField:41}
r, _ := json.Marshal(f)
fmt.Println(string(r)
我需要“ OptionField”为可选。有时它应该以值[0、1、2、3,]之一存在于json中。而在另一时间,它应该从json中排除。
我的问题是:当值是零,并且int的默认值是零时,omitempty将排除它。有什么方法可以省略条件字段(例如:如果值是-1,则省略)。还是有任何方法可以做到。
答案 0 :(得分:5)
您可以使用*int
而不是int并将指针值设置为nil来忽略它。
package main
import (
"encoding/json"
"fmt"
)
type MyStruct struct {
Code int `json:"Code"`
Flags uint8 `json:"Flags"`
OptionField *int `json:",omitempty"`
}
func format(s MyStruct) string {
r, _ := json.Marshal(s)
return string(r)
}
func main() {
f := MyStruct{Code: 500, Flags: 10, OptionField: new(int)}
fmt.Println(format(f)) // {"Code":500,"Flags":10,"OptionField":0}
f.OptionField = nil
fmt.Println(format(f)) // {"Code":500,"Flags":10}
}