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  }