Go语言学习笔记之序列化与反序列化

序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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))
}

  反序列化

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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()
}

 

  

 

posted @   ☞@_@  阅读(88)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示