Go语言中的json操作

Json序列化与反序列化

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import (
"encoding/json"
"fmt"
)

// 反序列化
type User struct {
UserName string `json:"username"`
Age int `json:"age"`
Sex string `json:"sex"`
Phone string `json:"phone"`
}

// 结构体转json
func structForJson() (jsonStr string) {
u := &User{
UserName: "root",
Age: 18,
Sex: "男",
Phone: "13160000001",
}
j, err := json.Marshal(u)
if err != nil {
fmt.Printf("struct for json err:%v\n", err)
return
}
jsonStr = string(j)
return
}

// json转结构体
func jsonForStruct() {
var u User
jsonStr := structForJson()
err := json.Unmarshal([]byte(jsonStr), &u)
if err != nil {
fmt.Printf("json for struct err:%v\n", err)
return
}
fmt.Printf("struct is %v\n", u)
}

// map转json
func mapForJson() (jsonStr string) {
var m map[string]interface{}
m = make(map[string]interface{})
m["username"] = "admin"
m["age"] = 19
m["sex"] = "男"
m["phone"] = "13770000000"
mj, err := json.Marshal(m)
if err != nil {
fmt.Printf("map for json err:%v\n", err)
return
}
jsonStr = string(mj)
return
}

// json转map
func jsonForMap() {
var m map[string]interface{}
m = make(map[string]interface{})
jsonStr := mapForJson()
err := json.Unmarshal([]byte(jsonStr), &m)
if err != nil {
fmt.Printf("json for map err:%v\n", err)
return
}
fmt.Printf("map is %v\n", m)
}

// slice转json
func sliceForJson() (jsonStr string) {
var l []*User
u1 := &User{
UserName: "u1",
Age: 18,
Sex: "男",
Phone: "110",
}
u2 := &User{
UserName: "u2",
Age: 28,
Sex: "男",
Phone: "120",
}
l = append(l, u1)
l = append(l, u2)
lj, err := json.Marshal(l)
if err != nil {
fmt.Printf("slice for json err:%v\n", err)
return
}
jsonStr = string(lj)
return
}

// json转slice
func jsonForSlice() {
var l []User
var u1 User
var u2 User
l = append(l, u1)
l = append(l, u2)
jsonStr := sliceForJson()
err := json.Unmarshal([]byte(jsonStr), &l)
if err != nil {
fmt.Printf("json for map err:%v\n", err)
return
}
fmt.Printf("map is %v\n", l)
}

func main() {
jsonForStruct()
jsonForMap()
jsonForSlice()
}
----------------------
struct is {root 18 男 13160000001}
map is map[age:19 phone:13770000000 sex:男 username:admin]
map is [{u1 18 男 110} {u2 28 男 120}]