有MyStruct的结构.
type MyStruct struct {
Code int `json:"Code"`
Flags uint8 `json:"Flags"`
OptionField int `json:",omitempty"`
}
Run Code Online (Sandbox Code Playgroud)
以下代码将其转换为json.
f := MyStruct{Code:500, OptionField:41}
r, _ := json.Marshal(f)
fmt.Println(string(r)
Run Code Online (Sandbox Code Playgroud)
我需要"OptionField"是可选的.有些时候它应该存在于json中,其中一个值为[0,1,2,3,].而在另一个时间它应该从json中排除.
我的问题是:omitempty将在值为零时将其排除,并且int的默认值为零.是否有任何方法可以在条件中省略字段(例如:如果值为-1则省略).或者有任何方法可以做到这一点.
小智 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}
}
Run Code Online (Sandbox Code Playgroud)