Go語言的json.Marshal()函數是用于將結構體或者其他類型數據轉換為JSON格式的字符串。對于空值的處理在實際開發工作中是尤為重要的,因為很多時候我們需要告訴客戶端一個屬性是不存在的,而不僅僅是它的值為null或者0。
type Person struct { Name string `json:"name"` Age int `json:"age"` Address *string `json:"address,omitempty"` } func main() { p1 := Person{ Name: "張三", Age: 20, } p2 := Person{ Name: "李四", Age: 30, } jsonBytes1, _ := json.Marshal(p1) fmt.Println(string(jsonBytes1)) // {"name":"張三","age":20} jsonBytes2, _ := json.Marshal(p2) fmt.Println(string(jsonBytes2)) // {"name":"李四","age":30,"address":null} }
在上述代碼中,我們創建了一個名為Person的結構體,并且在地址上使用了指針。結構體包含一個名稱,一個年齡和一個地址。除此之外,我們還在結構體中利用json標簽來給這些屬性分別定義JSON鍵。在Main()函數中,我們創建了兩個Person類型的變量,并使用json.Marshal()函數將它們轉換為JSON字符串。在第一個例子中,我們沒有為Person結構體的Address屬性賦值,因此由于我們在結構體標簽中使用了omitempty選項,沒有生成JSON字符串中對應的字段。在第二個例子中,我們為結構體的Address屬性分配了一個空指針,這會導致在JSON字符串中生成一個null值。
尚需指出的是,由于Go語言不支持在結構體中使用null值,因此在分配空引用時,我們會將其分配為一個空指針。這很重要,因為一些語言,如JavaScript,可以解釋null值。如果我們在Go中使用Marshal()函數來處理null值,就需要確保我們使用JavaScript等其他語言處理JSON值的架構時能夠解釋null值。
下一篇c json換行