Go語言能夠輕松地生成和解析JSON數(shù)據(jù)。JSON是一種輕量級數(shù)據(jù)格式,可用于數(shù)據(jù)交換。
//生成JSON package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { p := Person{Name: "Tom", Age: 20} b, err := json.Marshal(p) if err != nil { fmt.Println("json error:", err) } fmt.Println(string(b)) }
上述代碼中,使用Marshal函數(shù)生成JSON。json.Marshal返回字節(jié)切片,可以使用string()函數(shù)將其轉(zhuǎn)換為字符串。結(jié)果如下:
{"name":"Tom","age":20}
Parse函數(shù)用于解析JSON數(shù)據(jù)為結(jié)構(gòu)體。注意,結(jié)構(gòu)體中的字段必須是導(dǎo)出的,即首字母大寫。
//解析JSON package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { str := `{"name":"Tom","age":20}` var p Person err := json.Unmarshal([]byte(str), &p) if err != nil { fmt.Println("json error:", err) } fmt.Println(p) }
上述代碼中,使用Unmarshal函數(shù)解析JSON。字節(jié)切片必須傳遞給Unmarshal函數(shù),并且必須使用&將p變量作為指針傳遞。結(jié)果如下:
{Tom 20}
可以使用MarshalIndent函數(shù)生成JSON,以便更好地閱讀。此函數(shù)還允許指定縮進(jìn)量。
//生成格式化的JSON package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { p := Person{Name: "Tom", Age: 20} b, err := json.MarshalIndent(p, "", " ") if err != nil { fmt.Println("json error:", err) } fmt.Println(string(b)) }
上述代碼中,使用MarshalIndent函數(shù)產(chǎn)生縮進(jìn)的JSON。第二個(gè)參數(shù)為空字符串,用于指定每個(gè)級別的縮進(jìn)字符串。第三個(gè)參數(shù)是一個(gè)字符串,用于指定縮進(jìn)字符串的數(shù)目。結(jié)果如下:
{ "name": "Tom", "age": 20 }