Go語言中的JSON包提供一個Null類型,表示JSON數據中的null值。通常情況下,Null類型會在解析JSON數據時自動識別并轉換為nil值。
package main import ( "encoding/json" "fmt" ) type Order struct { ID int `json:"id"` Amount float64 `json:"amount"` CreatedAt time.Time `json:"createdAt"` } func main() { jsonString := `{ "id": 1, "amount": null, "createdAt": "2022-01-01T00:00:00Z" }` var order Order json.Unmarshal([]byte(jsonString), &order) fmt.Println(order.Amount == 0.0) }
在上面的例子中,JSON數據中的amount字段的值為null,在解析后將其轉換為Go語言的float64類型的默認值0.0。因此,fmt.Println的輸出為true。
在編碼JSON數據時,Null類型也會被自動轉換為null值。
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Job string `json:"job,omitempty"` Phone string `json:"phone,omitempty"` } func main() { person1 := Person{ Name: "Alice", Age: 20, Job: null, } jsonData, _ := json.Marshal(person1) fmt.Println(string(jsonData)) }
在上面的例子中,Person結構體中的Job字段的值為Null類型。在編碼JSON數據時,Null類型被自動轉換為null值,并根據omitempty選項決定是否序列化該字段。因此,最終生成的JSON數據中不包含Job字段。