github.com/gogf/gf@v1.16.9/.example/encoding/gjson/gjson.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/gogf/gf/encoding/gjson" 7 "github.com/gogf/gf/os/glog" 8 "github.com/gogf/gf/os/gtime" 9 ) 10 11 func getByPattern() { 12 data := 13 `{ 14 "users" : { 15 "count" : 100, 16 "list" : [ 17 {"name" : "小明", "score" : 60}, 18 {"name" : "John", "score" : 99.5} 19 ] 20 } 21 }` 22 j, err := gjson.DecodeToJson([]byte(data)) 23 if err != nil { 24 glog.Error(err) 25 } else { 26 fmt.Println("John Score:", j.GetFloat32("users.list.1.score")) 27 } 28 } 29 30 // 当键名存在"."号时,检索优先级:键名->层级,因此不会引起歧义 31 func testMultiDots() { 32 data := 33 `{ 34 "users" : { 35 "count" : 100 36 }, 37 "users.count" : 101 38 }` 39 j, err := gjson.DecodeToJson([]byte(data)) 40 if err != nil { 41 glog.Error(err) 42 } else { 43 fmt.Println("Users Count:", j.GetInt("users.count")) 44 } 45 } 46 47 // 设置数据 48 func testSet() { 49 data := 50 `{ 51 "users" : { 52 "count" : 100 53 } 54 }` 55 j, err := gjson.DecodeToJson([]byte(data)) 56 if err != nil { 57 glog.Error(err) 58 } else { 59 j.Set("users.count", 1) 60 j.Set("users.list", []string{"John", "小明"}) 61 c, _ := j.ToJson() 62 fmt.Println(string(c)) 63 } 64 } 65 66 // 将Json数据转换为其他数据格式 67 func testConvert() { 68 data := 69 `{ 70 "users" : { 71 "count" : 100, 72 "list" : ["John", "小明"] 73 } 74 }` 75 j, err := gjson.DecodeToJson([]byte(data)) 76 if err != nil { 77 glog.Error(err) 78 } else { 79 c, _ := j.ToJson() 80 fmt.Println("JSON:") 81 fmt.Println(string(c)) 82 fmt.Println("======================") 83 84 fmt.Println("XML:") 85 c, _ = j.ToXmlIndent() 86 fmt.Println(string(c)) 87 fmt.Println("======================") 88 89 fmt.Println("YAML:") 90 c, _ = j.ToYaml() 91 fmt.Println(string(c)) 92 fmt.Println("======================") 93 94 fmt.Println("TOML:") 95 c, _ = j.ToToml() 96 fmt.Println(string(c)) 97 } 98 } 99 100 func testSplitChar() { 101 var v interface{} 102 j := gjson.New(nil) 103 t1 := gtime.TimestampNano() 104 j.Set("a.b.c.d.e.f.g.h.i.j.k", 1) 105 t2 := gtime.TimestampNano() 106 fmt.Println(t2 - t1) 107 108 t5 := gtime.TimestampNano() 109 v = j.Get("a.b.c.d.e.f.g.h.i.j.k") 110 t6 := gtime.TimestampNano() 111 fmt.Println(v) 112 fmt.Println(t6 - t5) 113 114 j.SetSplitChar('#') 115 116 t7 := gtime.TimestampNano() 117 v = j.Get("a#b#c#d#e#f#g#h#i#j#k") 118 t8 := gtime.TimestampNano() 119 fmt.Println(v) 120 fmt.Println(t8 - t7) 121 } 122 123 func testViolenceCheck() { 124 j := gjson.New(nil) 125 t1 := gtime.TimestampNano() 126 j.Set("a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a", 1) 127 t2 := gtime.TimestampNano() 128 fmt.Println(t2 - t1) 129 130 t3 := gtime.TimestampNano() 131 j.Set("a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a", 1) 132 t4 := gtime.TimestampNano() 133 fmt.Println(t4 - t3) 134 135 t5 := gtime.TimestampNano() 136 j.Get("a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a") 137 t6 := gtime.TimestampNano() 138 fmt.Println(t6 - t5) 139 140 j.SetViolenceCheck(false) 141 142 t7 := gtime.TimestampNano() 143 j.Set("a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a", 1) 144 t8 := gtime.TimestampNano() 145 fmt.Println(t8 - t7) 146 147 t9 := gtime.TimestampNano() 148 j.Get("a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a") 149 t10 := gtime.TimestampNano() 150 fmt.Println(t10 - t9) 151 } 152 153 func main() { 154 testViolenceCheck() 155 }