json是一種輕量級的資料交換格式,有限提高資料在網路中的傳輸效率,易於閱讀和編寫資料,且易於生成key-value格式資料。
一:json資料的序列化舉例
package main import ( "fmt" "encoding/json" ) //結構體變數序列化 type Personal struct{ Name string Age int Hobby string } func StructJson() { personal := Personal{ Name : "louis", Age : 18, Hobby : "it", } //json.Marshal返回[]byte與err personal_json, _:= json.Marshal(personal) //由於personal_json是[]byte資料型別,故要通過string()函式轉換 fmt.Printf("personal_json=%v\n", string(personal_json)) } //map資料序列化 func MapJson(){ m := map[string]interface{}{ "Address":"深圳", "Phone":"12345678911", "Salary":10000, } map_json, _ := json.Marshal(m) fmt.Printf("map_json=%v\n", string(map_json)) } //切片序列化 func SliceJson(){ s := []int{1,2,3,4,5,6,7,8} slice_json, _ := json.Marshal(s) fmt.Printf("slice_json=%v\n", string(slice_json)) } //基本資料型別序列化 func Base() { str := "string" base_json, _ := json.Marshal(str) fmt.Printf("base_json=%v\n", string(base_json)) } func main() { StructJson() MapJson() SliceJson() Base() } 結果 [ `go run json.go` | done ] personal_json={"Name":"louis","Age":18,"Hobby":"it"} map_json={"Address":"深圳","Phone":"12345678911","Salary":10000} slice_json=[1,2,3,4,5,6,7,8] base_json="string"
二:json反序列化
package main import ( "fmt" "encoding/json" ) //結構體變數序列化 type Personal struct{ Name string Age int Hobby string } func StructJson() { personal := Personal{ Name : "louis", Age : 18, Hobby : "it", } //json.Marshal返回[]byte與err personal_json, _:= json.Marshal(personal) //由於personal_json是[]byte資料型別,故要通過string()函式轉換 fmt.Printf("personal_json=%v\n", string(personal_json)) var personal_data Personal //接受的變數必須為指標型別 err := json.Unmarshal([]byte(personal_json), &personal_data) if err != nil { fmt.Printf("反序列化錯誤:%v\n", err) } fmt.Printf("personal_json反序列化=%v\n", personal_data) } func main() { StructJson() } 結果 [ `go run json.go` | done ] personal_json={"Name":"louis","Age":18,"Hobby":"it"} personal_json反序列化={louis 18 it}
三:結構體的序列化的反射機制
當結構體定義的欄位為大寫字母開頭,但客戶端希望接受到的都是小寫字母的欄位時,可以使用反射機制
package main import ( "fmt" "encoding/json" ) //結構體變數序列化 type Personal struct{ Name string `json:"name"` Age int `json:"age"` Hobby string `json:"hobby_data"` } func StructJson() { personal := Personal{ Name : "louis", Age : 18, Hobby : "it", } personal_json, _:= json.Marshal(personal) fmt.Printf("personal_json=%v\n", string(personal_json)) } func main() { StructJson() } 結果 [ `go run json.go` | done ] personal_json={"name":"louis","age":18,"hobby_data":"it"}