Eli's Blog

1. 序列化

json.Marshal(v interface{}) ([]byte, error)

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
type Person struct {
Name string `json:"name"`
Age byte `json:"age"`
Birthday string `json:"birthday"`
Salary float64 `json:"salary"`
Occupation string `json:"occupation"`
}

func main() {
serializeStruct()

serializeMap()

serializeSlice()
}

func serializeStruct() {
p := Person{
Name: "张三",
Age: 45,
Birthday: "1975-05-01",
Salary: 32000.0,
Occupation: "电气工程师",
}

data, err := json.Marshal(&p)
if err != nil {
fmt.Println(err)
}

fmt.Println(string(data))
}

func serializeMap() {
var m map[string]interface{}

m = make(map[string]interface{})

m["name"] = "李四"
m["age"] = 30
m["city"] = "北京市"

data, err := json.Marshal(m)
if err != nil {
fmt.Println(err)
}

fmt.Println(string(data))
}

func serializeSlice() {
var s []map[string]interface{}

m1 := make(map[string]interface{})
m1["name"] = "Tom"
m1["age"] = 17
m1["city"] = "Los Angles"

m2 := make(map[string]interface{})
m2["name"] = "Julie"
m2["age"] = 21
m2["city"] = "New York"

s = append(s, m1, m2)

data, err := json.Marshal(s)
if err != nil {
fmt.Println(err)
}

fmt.Println(string(data))
}

2. 反序列化

json.Unmarshal(data []byte, v interface{}) error

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
type Person struct {
Name string `json:"name"`
Age byte `json:"age"`
Birthday string `json:"birthday"`
Salary float64 `json:"salary"`
Occupation string `json:"occupation"`
}

func main() {
deserializeStruct()

deserializeMap()

deserializeSlice()
}

func deserializeStruct() {
js := `{"name":"张三","age":45,"birthday":"1975-05-01","salary":32000,"occupation":"电气工程师"}`

var p Person

err := json.Unmarshal([]byte(js), &p)
if err != nil {
fmt.Println(err)
}

fmt.Println(p)
}

func deserializeMap() {
js := `{"age":30,"city":"北京市","name":"李四"}`

var m map[string]interface{}

// 反序列化不需要make,注意使用指针 &m
err := json.Unmarshal([]byte(js), &m)
if err != nil {
fmt.Println(err)
}

fmt.Println(m)
}

func deserializeSlice() {
js := `[{"age":17,"city":"Los Angles","name":"Tom"},{"age":21,"city":"New York","name":"Julie"}]`

var s []map[string]interface{}

// 反序列化不需要make,注意使用指针 &s
err := json.Unmarshal([]byte(js), &s)
if err != nil {
fmt.Println(err)
}

fmt.Println(s)
}