我们在解析结构体和json时,总会出现空值,特别是在结构体用作双方定义的数据结构时,有时候并空值其实并不是我们需要的字段
package main
import (
"fmt"
"encoding/json"
)
type KeyUsage struct {
UserName string `json:"username"`
Algorithm string `json:"algo"`
Size uint `json:"size"`
//Usage string `json:"usage, omitempty"` 1
//Usage string `json:"usage ,omitempty"` 2
//Usage string `json:"usage,omitempty"` 3
Usage string `json:"usage"` // 4
}
func main() {
key := KeyUsage{
UserName: "hello",
Algorithm: "rsa",
Size: 2048,
Usage :"",
}
keyBytes, err := json.Marshal(key)
if err != nil {
//...
}
fmt.Println(string(keyBytes)
}
执行go run
, 在 KeyUsage
定义中的1 2 3 4 结果分别如下:
{"username":"hello","algo":"rsa","size":2048,"usage":""}
{"username":"hello","algo":"rsa","size":2048}
{"username":"hello","algo":"rsa","size":2048}
{"username":"hello","algo":"rsa","size":2048,"usage":""}
从上打印可以看出,如果不打印为空的字符串,需要在结构体后面的json
标签中加上忽略空值 omitempty
字段。
注意: 逗号与omitempty
是放在一块儿的。中间不能有空格,否则空字段不会被忽略
PS: go version go1.11 darwin/amd64