Go语言学习笔记之序列化与反序列化
序列化
package main import ( "encoding/json" "fmt" ) type User struct { Name string `json:"用户名"`//反射机制 Age int `json:"年龄"` Sex string `json:"性别"` } func json_Struct() { u:=User{"Jack",23,"男"} data,err:=json.Marshal(&u) if err!=nil{ fmt.Println("出错!") return } fmt.Printf("序列化后=%v\n", string(data)) } func json_Map(){ mp:=map[string]int{ "Jack":21, "Amy":23, "David":89, } data,err:=json.Marshal(&mp) if err!=nil{ fmt.Println("出错!") } fmt.Println(string(data)) } func json_Slice(){ arr:=[]map[string]interface{}{ {"jack":21},{"tom":23},{"Mg":24}, } data,err:=json.Marshal(&arr) if err!=nil{ fmt.Println("出错!") } fmt.Println(string(data)) } func main() { json_Struct() json_Map() json_Slice() arr:=[...]int{1,2,3,4} data,err:=json.Marshal(&arr) if err!=nil{ fmt.Println("出错!") } fmt.Println(string(data)) }
反序列化
package main import ( "fmt" "encoding/json" ) //定义一个结构体 type Monster struct { Name string Age int Birthday string //.... Sal float64 Skill string } //演示将 json 字符串,反序列化成 struct func unmarshalStruct() { //说明 str 在项目开发中,是通过网络传输获取到.. 或者是读取文件获取到 str := "{\"Name\":\"牛魔王\",\"Age\":500,\"Birthday\":\"2011-11-11\",\"Sal\":8000,\"Skill\":\"牛魔拳\"}" //定义一个 Monster 实例 var monster Monster err := json.Unmarshal([]byte(str), &monster) if err != nil { fmt.Printf("unmarshal err=%v\n", err) } fmt.Printf("反序列化后 monster=%v monster.Name=%v \n", monster, monster.Name) } //演示将 json 字符串,反序列化成 map func unmarshalMap() { str := "{\"address\":\"洪崖洞\",\"age\":30,\"name\":\"红孩儿\"}" //定义一个 map var a map[string]interface{} //反序列化 //注意:反序列化 map,不需要 make,因为 make 操作被封装到 Unmarshal 函数 err := json.Unmarshal([]byte(str), &a) if err != nil { fmt.Printf("unmarshal err=%v\n", err) } fmt.Printf("反序列化后 a=%v\n", a) } //演示将 json 字符串,反序列化成切片 func unmarshalSlice() { str := "[{\"address\":\"北京\",\"age\":\"7\",\"name\":\"jack\"}," + "{\"address\":[\"墨西哥\",\"夏威夷\"],\"age\":\"20\",\"name\":\"tom\"}]" //定义一个 slice var slice []map[string]interface{} //反序列化,不需要 make,因为 make 操作被封装到 Unmarshal 函数 err := json.Unmarshal([]byte(str), &slice) if err != nil { fmt.Printf("unmarshal err=%v\n", err) } fmt.Printf("反序列化后 slice=%v\n", slice) } func main() { unmarshalStruct() unmarshalMap() unmarshalSlice() }