github.com/zhongdalu/gf@v1.0.0/g/encoding/gjson/gjson_z_unit_load_test.go (about)

     1  // Copyright 2017 gf Author(https://github.com/zhongdalu/gf). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/zhongdalu/gf.
     6  
     7  package gjson_test
     8  
     9  import (
    10  	"testing"
    11  
    12  	"github.com/zhongdalu/gf/g"
    13  	"github.com/zhongdalu/gf/g/encoding/gjson"
    14  	"github.com/zhongdalu/gf/g/os/gfile"
    15  	"github.com/zhongdalu/gf/g/test/gtest"
    16  )
    17  
    18  func Test_Load_JSON(t *testing.T) {
    19  	data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`)
    20  	// JSON
    21  	gtest.Case(t, func() {
    22  		j, err := gjson.LoadContent(data)
    23  		gtest.Assert(err, nil)
    24  		gtest.Assert(j.Get("n"), "123456789")
    25  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
    26  		gtest.Assert(j.Get("m.k"), "v")
    27  		gtest.Assert(j.Get("a"), g.Slice{1, 2, 3})
    28  		gtest.Assert(j.Get("a.1"), 2)
    29  	})
    30  	// JSON
    31  	gtest.Case(t, func() {
    32  		path := "test.json"
    33  		gfile.PutBinContents(path, data)
    34  		defer gfile.Remove(path)
    35  		j, err := gjson.Load(path)
    36  		gtest.Assert(err, nil)
    37  		gtest.Assert(j.Get("n"), "123456789")
    38  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
    39  		gtest.Assert(j.Get("m.k"), "v")
    40  		gtest.Assert(j.Get("a"), g.Slice{1, 2, 3})
    41  		gtest.Assert(j.Get("a.1"), 2)
    42  	})
    43  }
    44  
    45  func Test_Load_XML(t *testing.T) {
    46  	data := []byte(`<doc><a>1</a><a>2</a><a>3</a><m><k>v</k></m><n>123456789</n></doc>`)
    47  	// XML
    48  	gtest.Case(t, func() {
    49  		j, err := gjson.LoadContent(data)
    50  		gtest.Assert(err, nil)
    51  		gtest.Assert(j.Get("doc.n"), "123456789")
    52  		gtest.Assert(j.Get("doc.m"), g.Map{"k": "v"})
    53  		gtest.Assert(j.Get("doc.m.k"), "v")
    54  		gtest.Assert(j.Get("doc.a"), g.Slice{"1", "2", "3"})
    55  		gtest.Assert(j.Get("doc.a.1"), 2)
    56  	})
    57  	// XML
    58  	gtest.Case(t, func() {
    59  		path := "test.xml"
    60  		gfile.PutBinContents(path, data)
    61  		defer gfile.Remove(path)
    62  		j, err := gjson.Load(path)
    63  		gtest.Assert(err, nil)
    64  		gtest.Assert(j.Get("doc.n"), "123456789")
    65  		gtest.Assert(j.Get("doc.m"), g.Map{"k": "v"})
    66  		gtest.Assert(j.Get("doc.m.k"), "v")
    67  		gtest.Assert(j.Get("doc.a"), g.Slice{"1", "2", "3"})
    68  		gtest.Assert(j.Get("doc.a.1"), 2)
    69  	})
    70  
    71  	// XML
    72  	gtest.Case(t, func() {
    73  		xml := `<?xml version="1.0"?>
    74  
    75  	<Output type="o">
    76  	<itotalSize>0</itotalSize>
    77  	<ipageSize>1</ipageSize>
    78  	<ipageIndex>2</ipageIndex>
    79  	<itotalRecords>GF框架</itotalRecords>
    80  	<nworkOrderDtos/>
    81  	<nworkOrderFrontXML/>
    82  	</Output>`
    83  		j, err := gjson.LoadContent(xml)
    84  		gtest.Assert(err, nil)
    85  		gtest.Assert(j.Get("Output.ipageIndex"), "2")
    86  		gtest.Assert(j.Get("Output.itotalRecords"), "GF框架")
    87  	})
    88  }
    89  
    90  func Test_Load_YAML1(t *testing.T) {
    91  	data := []byte(`
    92  a:
    93  - 1
    94  - 2
    95  - 3
    96  m:
    97   k: v
    98  "n": 123456789
    99      `)
   100  	// YAML
   101  	gtest.Case(t, func() {
   102  		j, err := gjson.LoadContent(data)
   103  		gtest.Assert(err, nil)
   104  		gtest.Assert(j.Get("n"), "123456789")
   105  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
   106  		gtest.Assert(j.Get("m.k"), "v")
   107  		gtest.Assert(j.Get("a"), g.Slice{1, 2, 3})
   108  		gtest.Assert(j.Get("a.1"), 2)
   109  	})
   110  	// YAML
   111  	gtest.Case(t, func() {
   112  		path := "test.yaml"
   113  		gfile.PutBinContents(path, data)
   114  		defer gfile.Remove(path)
   115  		j, err := gjson.Load(path)
   116  		gtest.Assert(err, nil)
   117  		gtest.Assert(j.Get("n"), "123456789")
   118  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
   119  		gtest.Assert(j.Get("m.k"), "v")
   120  		gtest.Assert(j.Get("a"), g.Slice{1, 2, 3})
   121  		gtest.Assert(j.Get("a.1"), 2)
   122  	})
   123  }
   124  
   125  func Test_Load_YAML2(t *testing.T) {
   126  	data := []byte("i : 123456789")
   127  	gtest.Case(t, func() {
   128  		j, err := gjson.LoadContent(data)
   129  		gtest.Assert(err, nil)
   130  		gtest.Assert(j.Get("i"), "123456789")
   131  	})
   132  }
   133  
   134  func Test_Load_TOML1(t *testing.T) {
   135  	data := []byte(`
   136  a = ["1", "2", "3"]
   137  n = 123456789
   138  
   139  [m]
   140    k = "v"
   141  `)
   142  	// TOML
   143  	gtest.Case(t, func() {
   144  		j, err := gjson.LoadContent(data)
   145  		gtest.Assert(err, nil)
   146  		gtest.Assert(j.Get("n"), "123456789")
   147  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
   148  		gtest.Assert(j.Get("m.k"), "v")
   149  		gtest.Assert(j.Get("a"), g.Slice{"1", "2", "3"})
   150  		gtest.Assert(j.Get("a.1"), 2)
   151  	})
   152  	// TOML
   153  	gtest.Case(t, func() {
   154  		path := "test.toml"
   155  		gfile.PutBinContents(path, data)
   156  		defer gfile.Remove(path)
   157  		j, err := gjson.Load(path)
   158  		gtest.Assert(err, nil)
   159  		gtest.Assert(j.Get("n"), "123456789")
   160  		gtest.Assert(j.Get("m"), g.Map{"k": "v"})
   161  		gtest.Assert(j.Get("m.k"), "v")
   162  		gtest.Assert(j.Get("a"), g.Slice{"1", "2", "3"})
   163  		gtest.Assert(j.Get("a.1"), 2)
   164  	})
   165  }
   166  
   167  func Test_Load_TOML2(t *testing.T) {
   168  	data := []byte("i=123456789")
   169  	gtest.Case(t, func() {
   170  		j, err := gjson.LoadContent(data)
   171  		gtest.Assert(err, nil)
   172  		gtest.Assert(j.Get("i"), "123456789")
   173  	})
   174  }
   175  
   176  func Test_Load_Basic(t *testing.T) {
   177  	gtest.Case(t, func() {
   178  		j := gjson.NewUnsafe()
   179  		gtest.Assert(j.Value(), nil)
   180  		_, err := gjson.Decode(nil)
   181  		gtest.AssertNE(err, nil)
   182  		_, err = gjson.DecodeToJson(nil)
   183  		gtest.AssertNE(err, nil)
   184  		j, err = gjson.LoadContent(nil)
   185  		gtest.Assert(err, nil)
   186  		gtest.Assert(j.Value(), nil)
   187  
   188  		j, err = gjson.LoadContent(`{"name": "gf"}`)
   189  		gtest.Assert(err, nil)
   190  
   191  		j, err = gjson.LoadContent(`{"name": "gf"""}`)
   192  		gtest.AssertNE(err, nil)
   193  
   194  		j = gjson.New(&g.Map{"name": "gf"})
   195  		gtest.Assert(j.GetString("name"), "gf")
   196  
   197  	})
   198  }