Golang中JSON使用实例

写在前面:Golang中对于JSON操作的几个实例。

一:Golang数据类型转为Json

1-0: 结构体 struct 转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
package main

import (
4"encoding/json"
4"fmt"
)

type Person struct {
4Name string
4Age int
4Rmb float64
4Gender string
4Hobby []string
}

func main() {
4var Tom = Person{
44Name: "Tom",
44Age: 2,
44Rmb: 268000,
44Gender: "Male",
44Hobby: []string{"eat fish", "play with tom"},
4}

4bytes, err := json.Marshal(Tom)
4if err != nil {
44fmt.Println("err is ", nil)
4}
4fmt.Println(string(bytes))
}

1-1: Json 转 结构体 struct

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
package main

import (
4"encoding/json"
4"fmt"
)

type Cat struct {
4Name string
4Age int
4Rmb float64
4Gender string
4Hobby []string
}

func main() {

4var Tom = Cat{}
4var jsonStr = `{"Name":"Tom","Age":2,"Rmb":268000,"Gender":"Male","Hobby":["eat fish","play with tom"]}`

4jsonStrBytes := []byte(jsonStr)

4err := json.Unmarshal(jsonStrBytes, &Tom)
4if err != nil {
44fmt.Println("err is ", err)
4}
4fmt.Println(Tom)
}

2-0: Map 转 json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
4"encoding/json"
4"fmt"
)

func main() {
4var Person map[string]interface{}
4Person = make(map[string]interface{})
4Person["name"] = "Jerry"
4Person["age"] = 2
4Person["rmb"] = 268000
4Person["gender"] = "Male"
4Person["hobby"] = []string{"watch tv", "play mobile", "chat with tom"}

4bytes, err := json.Marshal(Person)
4if err != nil {
44fmt.Println("err is ", nil)
4}
4fmt.Println(string(bytes))

}

2-1: Json 转 Map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
4"encoding/json"
4"fmt"
)

func main() {

4dataMap := make(map[string]interface{})

4var jsonStr = `{"age":2,"gender":"Male","hobby":["watch tv","play mobile","chat with tom"],"name":"Jerry","rmb":268000}`
4jsonStrBytes := []byte(jsonStr)
4//注意,这里是使用地址
4err := json.Unmarshal(jsonStrBytes, &dataMap)
4if err != nil {
44fmt.Println("err is ", err)
4}
4fmt.Println(dataMap)
}

3-1: 切片 slice 转 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
package main

import (
4"encoding/json"
4"fmt"
)

func main() {
4var slices = make([]map[string]interface{}, 0)

4//var Jerry map[string]interface{}
4Jerry := make(map[string]interface{})
4Jerry["name"] = "Jerry"
4Jerry["age"] = 2
4Jerry["rmb"] = 268000
4Jerry["gender"] = "Male"
4Jerry["hobby"] = []string{"watch tv", "play mobile", "chat with tom"}

4slices = append(slices, Jerry)

4Tom := make(map[string]interface{})
4Tom["name"] = "Tom"
4Tom["age"] = 3
4Tom["rmb"] = 288000
4Tom["gender"] = "Male"
4Tom["hobby"] = []string{"watch tv", "play mobile", "chat with jerry"}

4slices = append(slices, Tom)

4bytes, err := json.Marshal(slices)
4if err != nil {
44fmt.Println("err is ", err)
4}

4fmt.Println(string(bytes))
}
3-2: json 转 切片 slice
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
4"encoding/json"
4"fmt"
)

func main() {
4var jsonStr = `[{"age":2,"gender":"Male","hobby":["watch tv","play mobile","chat with tom"],"name":"Jerry","rmb":268000},{"age":3,"gender":"Male","hobby":["watch tv","play mobile","chat with jerry"],"name":"Tom","rmb":288000}]`

4var jsonStrBytes = []byte(jsonStr)

4var slices = make([]map[string]interface{}, 0)

4err := json.Unmarshal(jsonStrBytes, &slices)
4if err != nil {
44fmt.Println("ers is ", err)
4}
4fmt.Println(slices)
}

4-0: 结构体切片 与 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
package main

import (
4"encoding/json"
4"fmt"
)

type Player struct {
4Name string
4Age int
4Team string
4Country string
}

func main() {

4var White = Player{
44Name: "White",
44Age: 23,
44Team: "Spurs",
44Country: "USA",
4}

4var Mills = Player{
44Name: "Mills",
44Age: 30,
44Team: "Spurs",
44Country: "Australia",
4}

4Players := make([]Player, 0)

4Players = append(Players, White)
4Players = append(Players, Mills)

4//结构体切片转json字符串
4playersBytes, err := json.Marshal(Players)
4if err != nil {
44fmt.Println("err is ", err)
4}
4playJsonStr := string(playersBytes)
4fmt.Println(playJsonStr)

4//json字符串转结构体切片
4decodePlayers := make([]Player, 0)
4playStrBytes := []byte(playJsonStr)

4err1 := json.Unmarshal(playStrBytes, &decodePlayers)
4if err1 != nil {
44fmt.Println("err1 is ", err1)
4}

4fmt.Println(decodePlayers)

}

使用JSON 编码器编码Golang数据为JSON文件

1: map 数据结构写入到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
package main

import (
4"encoding/json"
4"fmt"
4"os"
)

func main() {
4Person := make(map[string]interface{})
4Person["name"] = "Jerry"
4Person["age"] = 2
4Person["rmb"] = 268000
4Person["gender"] = "Male"
4Person["hobby"] = []string{"watch tv", "play mobile", "chat with tom"}

4jsonFile, err := os.OpenFile("jerry.json", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
4if err != nil {
44fmt.Println("file err is ", err)
4}

4//创建json编码器
4encoder := json.NewEncoder(jsonFile)

4//数据编码
4err1 := encoder.Encode(Person)
4if err1 != nil {
44fmt.Println("err is ", err1)
44return
4}
}

2: 切片结构体数据结构写入到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
package main

import (
4"os"
4"fmt"
4"encoding/json"
)

func main() {

4type Animal struct {
44Name string
44Age int
44Rmb float64
44Gender string
44Hobby []string
4}

4var slices = make([]Animal, 0)

4Tom := Animal{
44Name: "TOM",
44Age: 2,
44Rmb: 26000,
44Gender: "male",
44Hobby: []string{"eat fish", "play with jerry"},
4}

4Jerry := Animal{
44Name: "TOM",
44Age: 2,
44Rmb: 26000,
44Gender: "male",
44Hobby: []string{"eat fish", "play with tom"},
4}

4slices = append(slices, Tom)
4slices = append(slices, Jerry)

4jsonFile, err := os.OpenFile("animals.json", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
4defer jsonFile.Close()

4if err != nil {
44fmt.Println("err is ", err)
44return
4}

4jsonEncoder := json.NewEncoder(jsonFile)
4err1 := jsonEncoder.Encode(slices)
4if err1 != nil {
44fmt.Println("err1 is ", err1)
44return

4}
}

3: 读取JSON文件 到 map

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
package main

import (
4"os"
4"fmt"
4"encoding/json"
)

func main() {

4Tom := make(map[string]interface{})

4srcJsonFile, err := os.OpenFile("jerry.json", os.O_RDONLY, 0666)
4defer srcJsonFile.Close()
4if err != nil {
44fmt.Println("err is ", nil)
44return
4}

4jsonDecoder := json.NewDecoder(srcJsonFile)
4err1 := jsonDecoder.Decode(&Tom)
4if err1 != nil {
44fmt.Println("err1 is ", err1)
44return
4}

4fmt.Println(Tom)
}

4: 读取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
package main

import (
4"os"
4"fmt"
4"encoding/json"
)

func main() {

4type Animal struct {
44Name string
44Age int
44Rmb float64
44Gender string
44Hobby []string
4}

4var slices = make([]Animal, 0)

4srcJsonFile, err := os.OpenFile("animals.json", os.O_RDONLY, 0666)
4defer srcJsonFile.Close()

4if err != nil {
44fmt.Println("err is ", nil)
44return
4}

4jsonDecoder := json.NewDecoder(srcJsonFile)
4err1 := jsonDecoder.Decode(&slices)
4if err1 != nil {
44fmt.Println("err1 is ", err1)
44return
4}

4for _, value := range slices {
44fmt.Println(value)
4}
}

5:json 解码 Unmarshal

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
package main

import (
4"encoding/json"
4"fmt"
)

func main() {
4type Animal struct {
44Name string
44Age int
44Rmb float64
44Gender string
44Hobby []string
4}
4var jsonStr = `{"age":2,"gender":"Male","hobby":["watch tv","play mobile","chat with tom"],"name":"Jerry","rmb":268000}`

4jsonBytes := []byte(jsonStr)

4var animal = &Animal{}

4err := json.Unmarshal(jsonBytes, animal)
4if err != nil {
44fmt.Println("err is ", err)
44return
4}

4fmt.Println(*animal)
}