JSON(javascript object notation)是一種輕量級的數據交換格式,易於人閱讀和編寫,同時也易於機器解析和生成。key-val
JSON是在2001年開始推廣的數據格式,目前已成為主流的數據格式。
JSON易於機器解析和生成,並有效地提升網絡傳輸效率。通常程序在網絡傳輸時會先將數據(結構體、map)等序列化成json字符串,到接收方得到json數據時,再反序列化恢復成原來的數據類型。這種方式已成為各個語言的標准。
要解析成json格式,struct里面的字段必須大寫!!!不然解析出來的是{}
因為Json包相當於一個外包,字段大寫才能被其調用。。。
package main import ( "encoding/json" "fmt" ) type monster struct { Name string Age int Birthday string Sal float64 Skill string } func testStruct() { m := monster{ Name: "牛魔王", Age: 10, Birthday: "1994-09-18", Sal: 10000.0, Skill: "牛魔拳", } //序列化 data, err := json.Marshal(&m) if err != nil { fmt.Println("序列化失敗,error=", err) } fmt.Printf("序列化之后的結果:%v\n", string(data)) } func testMap() { var a map[string]interface{} a = make(map[string]interface{}) a["name"] = "孫悟空" a["age"] = 20 a["address"] = "水簾洞" a["skill"] = "七十二變" data, err := json.Marshal(a) if err != nil { fmt.Println("序列化失敗,error=", err) } fmt.Printf("序列化之后的結果:%v\n", string(data)) } func testSlice() { var slice []map[string]interface{} var m1 map[string]interface{} m1 = make(map[string]interface{}) m1["name"] = "孫悟空" m1["age"] = 20 m1["address"] = "水簾洞" m1["skill"] = [2]string{"七十二變", "如意金箍棒"} slice = append(slice, m1) var m2 map[string]interface{} m2 = make(map[string]interface{}) m2["name"] = "豬八戒" m2["age"] = 30 slice = append(slice, m2) data, err := json.Marshal(slice) if err != nil { fmt.Println("序列化失敗,error=", err) } fmt.Printf("序列化之后的結果:%v\n", string(data)) } func testFloat64() { var a float64 a = 0.987 data, err := json.Marshal(a) if err != nil { fmt.Println("序列化失敗,error=", err) } fmt.Printf("序列化之后的結果:%v\n", string(data)) } func main() { testStruct() testMap() testSlice() testFloat64() }
要想序列化成小寫的,只需要用tag指定即可:
對普通數據類型進行序列化是沒意義的,只是相當於轉換成string類型。