在Go語言中,我們經(jīng)常需要將數(shù)據(jù)以JSON格式進(jìn)行處理。而在處理JSON數(shù)據(jù)時(shí),使用JSON標(biāo)準(zhǔn)庫會(huì)非常方便。除此之外,我們還可以通過使用default關(guān)鍵字來定義JSON數(shù)據(jù)中的默認(rèn)值。
import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Height float64 `json:"height,omitempty"` Gender string `json:"gender,omitempty"` } func main() { data := `{"name":"Mike", "age": 23}` var mike Person err := json.Unmarshal([]byte(data), &mike) if err != nil { fmt.Println("解析失敗:", err) } fmt.Println("Name: ", mike.Name) fmt.Println("Age: ", mike.Age) fmt.Println("Height: ", mike.Height) fmt.Println("Gender: ", mike.Gender) }
上面的代碼中定義了一個(gè)名為Person的結(jié)構(gòu)體類型,并使用json標(biāo)簽來映射JSON數(shù)據(jù)。其中,omitempty表示如果該字段的值為空,則忽略該字段。
在解析JSON數(shù)據(jù)時(shí),我們只需要調(diào)用json.Unmarshal()函數(shù)并將JSON字符串作為第一個(gè)參數(shù),將Person類型的指針作為第二個(gè)參數(shù)即可。如果解析失敗,則會(huì)返回一個(gè)錯(cuò)誤對(duì)象。
通過設(shè)置JSON數(shù)據(jù)中的默認(rèn)值,可以避免一些JSON數(shù)據(jù)為空的情況。比如下面的例子:
import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Gender string `json:"gender,default=male"` } func main() { data := `{"name":"Lucy", "age": 20}` var lucy Person err := json.Unmarshal([]byte(data), &lucy) if err != nil { fmt.Println("解析失敗:", err) } fmt.Println("Name: ", lucy.Name) fmt.Println("Age: ", lucy.Age) fmt.Println("Gender: ", lucy.Gender) }
當(dāng)JSON數(shù)據(jù)中沒有g(shù)ender字段時(shí),屬性值將為默認(rèn)值male。這樣,我們就可以在JSON中定義默認(rèn)值,并且在解析JSON數(shù)據(jù)時(shí),可以避免一些空值的問題。