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 }