0%

go中读取json

说明

  • 本文主要对json内容的读取

实例

  • data.json文件内容
1
{"code": 1, "msg":"success", "data":[{"id": 1, "name":"西瓜"},{"id": 2, "name": "苹果"}]}
  • main.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
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
package main

import (
"encoding/json"
"fmt"
"io/ioutil"
"os"

"github.com/tidwall/gjson"
)

func strGjson() {
// go get -u github.com/tidwall/gjson
jsonstr := `{"code": 1, "msg":"success", "data":[{"id": 1, "name":"西瓜"},{"id": 2, "name": "苹果"}]}`
results := gjson.GetMany(jsonstr, "code", "msg", "data")
fmt.Println(results) //[1 success [{"id": 1, "name":"西瓜"},{"id": 2, "name": "苹果"}]]
data := results[2]
fmt.Println(data) //[{"id": 1, "name":"西瓜"},{"id": 2, "name": "苹果"}]
if data.Exists() {
re := data.Array()
for _, v := range re {
fmt.Println(v) // {"id": 1, "name":"西瓜"}
fmt.Println(v.Get("name"))
}
}

}

func readByteJson() {
f, err := os.Open("hello_work\\data.json")
if err != nil {
fmt.Println("open file eror:", err)
return
}
defer f.Close()
// 不写结构体,直接用这种方式定义
formData := make(map[string]interface{})
// 解码json
json.NewDecoder(f).Decode(&formData)
// 第一次循环,取map值
for key, value := range formData {
fmt.Println("key:", key, " => value :", value)
// 第二次循环,取数组的值
if _, ok := value.([]interface{}); ok {
for k, v := range value.([]interface{}) {
fmt.Println("key:", k, " => value :", v)
// 第三次循环,取数组中map的值
for j, s := range v.(map[string]interface{}) {
fmt.Printf("%s: %v\n", j, s)

}
}
}
}

}
func byteGjson() {
// go get -u github.com/tidwall/gjson
f, err := os.Open("hello_work\\data.json")
if err != nil {
fmt.Println("open file eror:", err)
return
}
defer f.Close()
// 读取json内容,类型为[]byte
byteValue, _ := ioutil.ReadAll(f)
data := gjson.GetBytes(byteValue, "data")
code := gjson.GetBytes(byteValue, "code")
fmt.Println(data) // [{"id": 1, "name":"西瓜"},{"id": 2, "name": "苹果"}]
fmt.Println(code)
if data.Exists() {
re := data.Array()
for _, v := range re {
fmt.Println(v) // {"id": 1, "name":"西瓜"}
fmt.Println(v.Get("name"))
}
}

}

func main() {
// readJson()
// byteGjson()
strGjson()
}