1.結構體序列化
package main import ( "encoding/json" "fmt" ) //定義一個結構體 type Monster struct { Name string Age int Birthday string Sal float64 skill string } func testStruct(){ monster := Monster{ Name : "牛魔王", Age : 500, Birthday : "2021-11-11", Sal : 80000.0, skill : "牛魔拳", } //將monster 序列化 data, err :=json.Marshal(&monster) if err !=nil{ fmt.Printf("序列化錯誤 err=%v\n",err) } //輸出序列化結果 fmt.Printf("manster序列化后=%v",string(data)) } func main(){ //演示結構體序列化 testStruct() }

2.map序列化
package main import ( "encoding/json" "fmt" ) //將map進行序列化 func testMap() { //定義一個Map var a map[string]interface{} //使用map,需要make a = make(map[string]interface{}) a["name"] = "紅孩兒" a["age"] = 30 a["address"] = "火雲洞" //將a這個map進行序列化 data, err := json.Marshal(a) if err != nil { fmt.Printf("序列化錯誤 err=%v", err) } //輸出序列化后的結果 fmt.Printf("monster序列化后=%v\n", string(data)) } func main() { //演示map序列化 testMap() }

3.slice切片序列化
package main import ( "encoding/json" "fmt" ) //對切片進行序列化,我們這個切片 []map[string]interface{} func testSlice() { var slice []map[string]interface{} var m1 map[string]interface{} //使用map前需要make m1 = make(map[string]interface{}) m1["name"] = "jack" m1["age"] = "7" m1["address"] = "北京" slice = append(slice, m1) var m2 map[string]interface{} //使用map前需要make m2 = make(map[string]interface{}) m2["name"] = "tom" m2["age"] = "20" m2["address"] = "上海" slice = append(slice, m2) data, err := json.Marshal(slice) if err != nil { fmt.Printf("序列化錯誤 err=%v", err) } //輸出序列化后的結果 fmt.Printf("slice序列化后的結果=%v\n", string(data)) } func main() { testSlice() }

4.結構體序列化得tag標簽
定義結構體的屬性是大寫的字母,但有些時候序列化后需要是小寫的,這時候不能修改結構體的屬性為小寫,因為在序列化的操作是挎包操作,小寫字母不是可導出的。利用 tag標簽解決此問題.
正常情況下,你定義的結構體是這樣子的,每個字段都由名字和字段類型組成
//定義一個結構體 type Monster struct { Name string Age int Birthday string Sal float64 skill string }
用反引號(Esc鍵下面的那個鍵)包含的字符串,稱之為 Tag,也就是標簽。
//定義一個結構體 type Monster struct { Name string `json:"monster_name"` Age int `json:"monster_age"` Birthday string Sal float64 skill string }

