序列化
package main import ( "fmt" "encoding/json" ) //定义一个结构体 type Monster struct { Name string `json:"monster_name"` //反射机制 Age int `json:"monster_age"` Birthday string //.... Sal float64 Skill string } func testStruct() { //演示 monster := Monster{ Name :"牛魔王", Age : 500 , Birthday : "2011-11-11", Sal : 8000.0, Skill : "牛魔拳", } //将monster 序列化 data, err := json.Marshal(&monster) //.. if err != nil { fmt.Printf("序列号错误 err=%v\n", err) } //输出序列化后的结果 fmt.Printf("monster序列化后=%v\n", string(data)) } //将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进行序列化 //将monster 序列化 data, err := json.Marshal(a) if err != nil { fmt.Printf("序列化错误 err=%v\n", err) } //输出序列化后的结果 fmt.Printf("a map 序列化后=%v\n", string(data)) } //演示对切片进行序列化, 我们这个切片 []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"] = [2]string{"墨西哥","夏威夷"} slice = append(slice, m2) //将切片进行序列化操作 data, err := json.Marshal(slice) if err != nil { fmt.Printf("序列化错误 err=%v\n", err) } //输出序列化后的结果 fmt.Printf("slice 序列化后=%v\n", string(data)) } //对基本数据类型序列化,对基本数据类型进行序列化意义不大 func testFloat64() { var num1 float64 = 2345.67 //对num1进行序列化 data, err := json.Marshal(num1) if err != nil { fmt.Printf("序列化错误 err=%v\n", err) } //输出序列化后的结果 fmt.Printf("num1 序列化后=%v\n", string(data)) } func main() { //演示将结构体, map , 切片进行序列号 testStruct() testMap() testSlice()//演示对切片的序列化 testFloat64()//演示对基本数据类型的序列化 }
monster序列化后={"monster_name":"牛魔王","monster_age":500,"Birthday":"2011-11-11","Sal":8000,"Skill":"牛魔拳"} a map 序列化后={"address":"洪崖洞","age":30,"name":"红孩儿"} slice 序列化后=[{"address":"北京","age":"7","name":"jack"},{"address":["墨西哥","夏威夷"],"age":"20","name":"tom"}] num1 序列化后=2345.67
反序列化:
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) } //将map进行序列化 func testMap() string { //定义一个map var a map[string]interface{} //使用map,需要make a = make(map[string]interface{}) a["name"] = "红孩儿~~~~~~" a["age"] = 30 a["address"] = "洪崖洞" //将a这个map进行序列化 //将monster 序列化 data, err := json.Marshal(a) if err != nil { fmt.Printf("序列化错误 err=%v\n", err) } //输出序列化后的结果 //fmt.Printf("a map 序列化后=%v\n", string(data)) return string(data) } //演示将json字符串,反序列化成map func unmarshalMap() { //str := "{\"address\":\"洪崖洞\",\"age\":30,\"name\":\"红孩儿\"}" str := testMap() //定义一个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() }
反序列化后 monster={牛魔王~~~ 500 2011-11-11 8000 牛魔拳} monster.Name=牛魔王~~~ 反序列化后 a=map[address:洪崖洞 age:30 name:红孩儿~~~~~~] 反序列化后 slice=[map[address:北京 age:7 name:jack] map[address:[墨西哥 夏威夷] age:20 name:tom]]
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/11203190.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能