github.com/gogf/gf/v2@v2.7.4/encoding/gjson/gjson_z_unit_feature_load_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). 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/gogf/gf. 6 7 package gjson_test 8 9 import ( 10 "testing" 11 12 "github.com/gogf/gf/v2/encoding/gjson" 13 "github.com/gogf/gf/v2/frame/g" 14 "github.com/gogf/gf/v2/os/gfile" 15 "github.com/gogf/gf/v2/test/gtest" 16 ) 17 18 func Test_Load_JSON1(t *testing.T) { 19 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 20 // JSON 21 gtest.C(t, func(t *gtest.T) { 22 j, err := gjson.LoadContent(data) 23 t.AssertNil(err) 24 t.Assert(j.Get("n").String(), "123456789") 25 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 26 t.Assert(j.Get("m.k").String(), "v") 27 t.Assert(j.Get("a").Slice(), g.Slice{1, 2, 3}) 28 t.Assert(j.Get("a.1").Int(), 2) 29 }) 30 // JSON 31 gtest.C(t, func(t *gtest.T) { 32 errData := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]`) 33 _, err := gjson.LoadContentType("json", errData, true) 34 t.AssertNE(err, nil) 35 }) 36 // JSON 37 gtest.C(t, func(t *gtest.T) { 38 path := "test.json" 39 gfile.PutBytes(path, data) 40 defer gfile.Remove(path) 41 j, err := gjson.Load(path, true) 42 t.AssertNil(err) 43 t.Assert(j.Get("n").String(), "123456789") 44 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 45 t.Assert(j.Get("m.k").String(), "v") 46 t.Assert(j.Get("a").Slice(), g.Slice{1, 2, 3}) 47 t.Assert(j.Get("a.1").Int(), 2) 48 }) 49 } 50 51 func Test_Load_JSON2(t *testing.T) { 52 data := []byte(`{"n":123456789000000000000, "m":{"k":"v"}, "a":[1,2,3]}`) 53 gtest.C(t, func(t *gtest.T) { 54 j, err := gjson.LoadContent(data) 55 t.AssertNil(err) 56 t.Assert(j.Get("n").String(), "123456789000000000000") 57 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 58 t.Assert(j.Get("m.k").String(), "v") 59 t.Assert(j.Get("a").Slice(), g.Slice{1, 2, 3}) 60 t.Assert(j.Get("a.1").Int(), 2) 61 }) 62 } 63 64 func Test_Load_XML(t *testing.T) { 65 data := []byte(`<doc><a>1</a><a>2</a><a>3</a><m><k>v</k></m><n>123456789</n></doc>`) 66 // XML 67 gtest.C(t, func(t *gtest.T) { 68 j, err := gjson.LoadContent(data) 69 t.AssertNil(err) 70 t.Assert(j.Get("doc.n").String(), "123456789") 71 t.Assert(j.Get("doc.m").Map(), g.Map{"k": "v"}) 72 t.Assert(j.Get("doc.m.k").String(), "v") 73 t.Assert(j.Get("doc.a").Slice(), g.Slice{"1", "2", "3"}) 74 t.Assert(j.Get("doc.a.1").Int(), 2) 75 }) 76 // XML 77 gtest.C(t, func(t *gtest.T) { 78 j, err := gjson.LoadXml(data, true) 79 t.AssertNil(err) 80 t.Assert(j.Get("doc.n").String(), "123456789") 81 t.Assert(j.Get("doc.m").Map(), g.Map{"k": "v"}) 82 t.Assert(j.Get("doc.m.k").String(), "v") 83 t.Assert(j.Get("doc.a").Slice(), g.Slice{"1", "2", "3"}) 84 t.Assert(j.Get("doc.a.1").Int(), 2) 85 }) 86 // XML 87 gtest.C(t, func(t *gtest.T) { 88 errData := []byte(`<doc><a>1</a><a>2</a><a>3</a><m><k>v</k></m><n>123456789</n><doc>`) 89 _, err := gjson.LoadContentType("xml", errData, true) 90 t.AssertNE(err, nil) 91 }) 92 // XML 93 gtest.C(t, func(t *gtest.T) { 94 path := "test.xml" 95 gfile.PutBytes(path, data) 96 defer gfile.Remove(path) 97 j, err := gjson.Load(path) 98 t.AssertNil(err) 99 t.Assert(j.Get("doc.n").String(), "123456789") 100 t.Assert(j.Get("doc.m").Map(), g.Map{"k": "v"}) 101 t.Assert(j.Get("doc.m.k").String(), "v") 102 t.Assert(j.Get("doc.a").Array(), g.Slice{"1", "2", "3"}) 103 t.Assert(j.Get("doc.a.1").Int(), 2) 104 }) 105 106 // XML 107 gtest.C(t, func(t *gtest.T) { 108 xml := `<?xml version="1.0"?> 109 110 <Output type="o"> 111 <itotalSize>0</itotalSize> 112 <ipageSize>1</ipageSize> 113 <ipageIndex>2</ipageIndex> 114 <itotalRecords>GF框架</itotalRecords> 115 <nworkOrderDtos/> 116 <nworkOrderFrontXML/> 117 </Output>` 118 j, err := gjson.LoadContent(xml) 119 t.AssertNil(err) 120 t.Assert(j.Get("Output.ipageIndex"), "2") 121 t.Assert(j.Get("Output.itotalRecords"), "GF框架") 122 }) 123 } 124 125 func Test_Load_YAML1(t *testing.T) { 126 data := []byte(` 127 a: 128 - 1 129 - 2 130 - 3 131 m: 132 k: v 133 "n": 123456789 134 `) 135 // YAML 136 gtest.C(t, func(t *gtest.T) { 137 j, err := gjson.LoadContent(data) 138 t.AssertNil(err) 139 t.Assert(j.Get("n").String(), "123456789") 140 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 141 t.Assert(j.Get("m.k").String(), "v") 142 t.Assert(j.Get("a").Slice(), g.Slice{1, 2, 3}) 143 t.Assert(j.Get("a.1").Int(), 2) 144 }) 145 // YAML 146 gtest.C(t, func(t *gtest.T) { 147 j, err := gjson.LoadYaml(data, true) 148 t.AssertNil(err) 149 t.Assert(j.Get("n").String(), "123456789") 150 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 151 t.Assert(j.Get("m.k").String(), "v") 152 t.Assert(j.Get("a").Slice(), g.Slice{1, 2, 3}) 153 t.Assert(j.Get("a.1").Int(), 2) 154 }) 155 // YAML 156 gtest.C(t, func(t *gtest.T) { 157 path := "test.yaml" 158 gfile.PutBytes(path, data) 159 defer gfile.Remove(path) 160 j, err := gjson.Load(path) 161 t.AssertNil(err) 162 t.Assert(j.Get("n").String(), "123456789") 163 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 164 t.Assert(j.Get("m.k").String(), "v") 165 t.Assert(j.Get("a").Slice(), g.Slice{1, 2, 3}) 166 t.Assert(j.Get("a.1").Int(), 2) 167 }) 168 } 169 170 func Test_Load_YAML2(t *testing.T) { 171 data := []byte("i : 123456789") 172 gtest.C(t, func(t *gtest.T) { 173 j, err := gjson.LoadContent(data) 174 t.AssertNil(err) 175 t.Assert(j.Get("i"), "123456789") 176 }) 177 gtest.C(t, func(t *gtest.T) { 178 errData := []byte("i # 123456789") 179 _, err := gjson.LoadContentType("yaml", errData, true) 180 t.AssertNE(err, nil) 181 }) 182 } 183 184 func Test_Load_TOML1(t *testing.T) { 185 data := []byte(` 186 a = ["1", "2", "3"] 187 n = 123456789 188 189 [m] 190 k = "v" 191 `) 192 // TOML 193 gtest.C(t, func(t *gtest.T) { 194 j, err := gjson.LoadContent(data) 195 t.AssertNil(err) 196 t.Assert(j.Get("n").String(), "123456789") 197 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 198 t.Assert(j.Get("m.k").String(), "v") 199 t.Assert(j.Get("a").Slice(), g.Slice{"1", "2", "3"}) 200 t.Assert(j.Get("a.1").Int(), 2) 201 }) 202 // TOML 203 gtest.C(t, func(t *gtest.T) { 204 j, err := gjson.LoadToml(data, true) 205 t.AssertNil(err) 206 t.Assert(j.Get("n").String(), "123456789") 207 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 208 t.Assert(j.Get("m.k").String(), "v") 209 t.Assert(j.Get("a").Slice(), g.Slice{"1", "2", "3"}) 210 t.Assert(j.Get("a.1").Int(), 2) 211 }) 212 // TOML 213 gtest.C(t, func(t *gtest.T) { 214 path := "test.toml" 215 gfile.PutBytes(path, data) 216 defer gfile.Remove(path) 217 j, err := gjson.Load(path) 218 t.AssertNil(err) 219 t.Assert(j.Get("n").String(), "123456789") 220 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 221 t.Assert(j.Get("m.k").String(), "v") 222 t.Assert(j.Get("a").Slice(), g.Slice{"1", "2", "3"}) 223 t.Assert(j.Get("a.1").Int(), 2) 224 }) 225 } 226 227 func Test_Load_TOML2(t *testing.T) { 228 data := []byte("i=123456789") 229 gtest.C(t, func(t *gtest.T) { 230 j, err := gjson.LoadContent(data) 231 t.AssertNil(err) 232 t.Assert(j.Get("i"), "123456789") 233 }) 234 gtest.C(t, func(t *gtest.T) { 235 errData := []byte("i : 123456789") 236 _, err := gjson.LoadContentType("toml", errData, true) 237 t.AssertNE(err, nil) 238 }) 239 } 240 241 func Test_Load_Basic(t *testing.T) { 242 gtest.C(t, func(t *gtest.T) { 243 j := gjson.New(nil) 244 t.Assert(j.Interface(), nil) 245 _, err := gjson.Decode(nil) 246 t.AssertNE(err, nil) 247 _, err = gjson.DecodeToJson(nil) 248 t.AssertNE(err, nil) 249 j, err = gjson.LoadContent(nil) 250 t.AssertNil(err) 251 t.Assert(j.Interface(), nil) 252 253 j, err = gjson.LoadContent(`{"name": "gf"}`) 254 t.AssertNil(err) 255 256 j, err = gjson.LoadContent(`{"name": "gf"""}`) 257 t.AssertNE(err, nil) 258 259 j = gjson.New(&g.Map{"name": "gf"}) 260 t.Assert(j.Get("name").String(), "gf") 261 262 }) 263 } 264 265 func Test_Load_Ini(t *testing.T) { 266 var data = ` 267 268 ;注释 269 270 [addr] 271 ip = 127.0.0.1 272 port=9001 273 enable=true 274 275 [DBINFO] 276 type=mysql 277 user=root 278 password=password 279 280 ` 281 282 gtest.C(t, func(t *gtest.T) { 283 j, err := gjson.LoadContent(data) 284 if err != nil { 285 gtest.Fatal(err) 286 } 287 288 t.Assert(j.Get("addr.ip").String(), "127.0.0.1") 289 t.Assert(j.Get("addr.port").String(), "9001") 290 t.Assert(j.Get("addr.enable").String(), "true") 291 t.Assert(j.Get("DBINFO.type").String(), "mysql") 292 t.Assert(j.Get("DBINFO.user").String(), "root") 293 t.Assert(j.Get("DBINFO.password").String(), "password") 294 295 _, err = j.ToIni() 296 if err != nil { 297 gtest.Fatal(err) 298 } 299 }) 300 301 gtest.C(t, func(t *gtest.T) { 302 j, err := gjson.LoadIni(data, true) 303 if err != nil { 304 gtest.Fatal(err) 305 } 306 307 t.Assert(j.Get("addr.ip").String(), "127.0.0.1") 308 t.Assert(j.Get("addr.port").String(), "9001") 309 t.Assert(j.Get("addr.enable").String(), "true") 310 t.Assert(j.Get("DBINFO.type").String(), "mysql") 311 t.Assert(j.Get("DBINFO.user").String(), "root") 312 t.Assert(j.Get("DBINFO.password").String(), "password") 313 }) 314 315 gtest.C(t, func(t *gtest.T) { 316 errData := []byte("i : 123456789") 317 _, err := gjson.LoadContentType("ini", errData, true) 318 t.AssertNE(err, nil) 319 }) 320 } 321 322 func Test_Load_YamlWithV3(t *testing.T) { 323 content := ` 324 # CLI tool, only in development environment. 325 # https://goframe.org/pages/viewpage.action?pageId=3673173 326 gfcli: 327 gen: 328 dao: 329 - path : "../../pkg/oss/oss/internal" 330 group : "oss" 331 stdTime : true 332 descriptionTag : true 333 noJsonTag : true 334 noModelComment : true 335 overwriteDao : true 336 modelFileForDao : "model_dao.go" 337 tablesEx : | 338 bpmn_info, 339 dlocker, 340 dlocker_detail, 341 message_table, 342 monitor_data, 343 resource_param_info, 344 version_info, 345 version_topology_info, 346 work_flow, 347 work_flow_step_info, 348 work_flow_undo_step_info 349 350 - path : "../../pkg/oss/workflow/internal" 351 group : "workflow" 352 stdTime : true 353 descriptionTag : true 354 noJsonTag : true 355 noModelComment : true 356 overwriteDao : true 357 modelFileForDao : "model_dao.go" 358 ` 359 gtest.C(t, func(t *gtest.T) { 360 _, err := gjson.LoadContent(content) 361 t.AssertNil(err) 362 }) 363 } 364 365 func Test_Load_Properties(t *testing.T) { 366 var data = ` 367 368 #注释 369 370 371 addr.ip = 127.0.0.1 372 addr.port=9001 373 addr.enable=true 374 DBINFO.type=mysql 375 DBINFO.user=root 376 DBINFO.password=password 377 378 ` 379 380 gtest.C(t, func(t *gtest.T) { 381 j, err := gjson.LoadContent(data) 382 if err != nil { 383 gtest.Fatal(err) 384 } 385 386 t.Assert(j.Get("addr.ip").String(), "127.0.0.1") 387 t.Assert(j.Get("addr.port").String(), "9001") 388 t.Assert(j.Get("addr.enable").String(), "true") 389 t.Assert(j.Get("DBINFO.type").String(), "mysql") 390 t.Assert(j.Get("DBINFO.user").String(), "root") 391 t.Assert(j.Get("DBINFO.password").String(), "password") 392 393 _, err = j.ToProperties() 394 if err != nil { 395 gtest.Fatal(err) 396 } 397 }) 398 399 gtest.C(t, func(t *gtest.T) { 400 j, err := gjson.LoadProperties(data, true) 401 if err != nil { 402 gtest.Fatal(err) 403 } 404 405 t.Assert(j.Get("addr.ip").String(), "127.0.0.1") 406 t.Assert(j.Get("addr.port").String(), "9001") 407 t.Assert(j.Get("addr.enable").String(), "true") 408 t.Assert(j.Get("DBINFO.type").String(), "mysql") 409 t.Assert(j.Get("DBINFO.user").String(), "root") 410 t.Assert(j.Get("DBINFO.password").String(), "password") 411 }) 412 413 gtest.C(t, func(t *gtest.T) { 414 errData := []byte("i\\u1 : 123456789") 415 _, err := gjson.LoadContentType("properties", errData, true) 416 t.AssertNE(err, nil) 417 }) 418 }