在Go語言中,當(dāng)我們使用json.Marshal()函數(shù)進(jìn)行JSON序列化時,如果數(shù)據(jù)中存在nil值或者空值,它們會被輸出為null值。
package main import ( "encoding/json" "fmt" ) type Student struct { Name string `json:"name"` Age int `json:"age"` Grade string `json:"grade,omitempty"` Score *int `json:"score,omitempty"` } func main() { score := 92 s := Student{ Name: "Jack", Age: 18, Score: &score, } data, _ := json.Marshal(s) fmt.Println(string(data)) }
對于上述代碼中的結(jié)構(gòu)體Student來說,如果不給Grade和Score字段賦值,則它們的值默認(rèn)為nil。在輸出JSON字符串時,這兩個字段都會被輸出為null值。
我們可以在對應(yīng)字段的tag中加上omitempty選項(xiàng)來避免輸出null值。如下所示:
type Student struct { Name string `json:"name"` Age int `json:"age"` Grade string `json:"grade,omitempty"` Score *int `json:"score,omitempty"` }
在上述代碼中,omitempty選項(xiàng)表示如果對應(yīng)字段的值是空或者nil,則不輸出該字段。
使用這種方式,我們可以自定義控制JSON輸出中的null值,確保輸出的JSON數(shù)據(jù)更加規(guī)范和可讀。