github.com/wangyougui/gf/v2@v2.6.5/encoding/gjson/gjson_z_unit_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/wangyougui/gf. 6 7 package gjson_test 8 9 import ( 10 "fmt" 11 "testing" 12 13 "github.com/wangyougui/gf/v2/container/gmap" 14 "github.com/wangyougui/gf/v2/container/gvar" 15 "github.com/wangyougui/gf/v2/encoding/gjson" 16 "github.com/wangyougui/gf/v2/frame/g" 17 "github.com/wangyougui/gf/v2/os/gtime" 18 "github.com/wangyougui/gf/v2/test/gtest" 19 "github.com/wangyougui/gf/v2/util/gconv" 20 ) 21 22 func Test_New(t *testing.T) { 23 // New with json map. 24 gtest.C(t, func(t *gtest.T) { 25 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 26 j := gjson.New(data) 27 t.Assert(j.Get("n").String(), "123456789") 28 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 29 t.Assert(j.Get("a").Array(), g.Slice{1, 2, 3}) 30 }) 31 // New with json array map. 32 gtest.C(t, func(t *gtest.T) { 33 j := gjson.New(`[{"a":1},{"b":2},{"c":3}]`) 34 t.Assert(j.Get(".").String(), `[{"a":1},{"b":2},{"c":3}]`) 35 t.Assert(j.Get("2.c").String(), `3`) 36 }) 37 // New with gvar. 38 // https://github.com/wangyougui/gf/issues/1571 39 gtest.C(t, func(t *gtest.T) { 40 v := gvar.New(`[{"a":1},{"b":2},{"c":3}]`) 41 j := gjson.New(v) 42 t.Assert(j.Get(".").String(), `[{"a":1},{"b":2},{"c":3}]`) 43 t.Assert(j.Get("2.c").String(), `3`) 44 }) 45 // New with gmap. 46 gtest.C(t, func(t *gtest.T) { 47 m := gmap.NewAnyAnyMapFrom(g.MapAnyAny{ 48 "k1": "v1", 49 "k2": "v2", 50 }) 51 j := gjson.New(m) 52 t.Assert(j.Get("k1"), "v1") 53 t.Assert(j.Get("k2"), "v2") 54 t.Assert(j.Get("k3"), nil) 55 }) 56 // https://github.com/wangyougui/gf/issues/3253 57 gtest.C(t, func(t *gtest.T) { 58 type TestStruct struct { 59 Result []map[string]string `json:"result"` 60 } 61 ts := &TestStruct{ 62 Result: []map[string]string{ 63 { 64 "Name": "gf", 65 "Role": "", 66 }, 67 }, 68 } 69 gjson.New(ts) 70 }) 71 } 72 73 func Test_Valid(t *testing.T) { 74 data1 := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 75 data2 := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]`) 76 gtest.C(t, func(t *gtest.T) { 77 t.Assert(gjson.Valid(data1), true) 78 t.Assert(gjson.Valid(data2), false) 79 }) 80 } 81 82 func Test_Encode(t *testing.T) { 83 value := g.Slice{1, 2, 3} 84 gtest.C(t, func(t *gtest.T) { 85 b, err := gjson.Encode(value) 86 t.AssertNil(err) 87 t.Assert(b, []byte(`[1,2,3]`)) 88 }) 89 } 90 91 func Test_Decode(t *testing.T) { 92 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 93 gtest.C(t, func(t *gtest.T) { 94 v, err := gjson.Decode(data) 95 t.AssertNil(err) 96 t.Assert(v, g.Map{ 97 "n": 123456789, 98 "a": g.Slice{1, 2, 3}, 99 "m": g.Map{ 100 "k": "v", 101 }, 102 }) 103 }) 104 gtest.C(t, func(t *gtest.T) { 105 var v interface{} 106 err := gjson.DecodeTo(data, &v) 107 t.AssertNil(err) 108 t.Assert(v, g.Map{ 109 "n": 123456789, 110 "a": g.Slice{1, 2, 3}, 111 "m": g.Map{ 112 "k": "v", 113 }, 114 }) 115 }) 116 gtest.C(t, func(t *gtest.T) { 117 j, err := gjson.DecodeToJson(data) 118 t.AssertNil(err) 119 t.Assert(j.Get("n").String(), "123456789") 120 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 121 t.Assert(j.Get("m.k"), "v") 122 t.Assert(j.Get("a").Array(), g.Slice{1, 2, 3}) 123 t.Assert(j.Get("a.1").Int(), 2) 124 }) 125 } 126 127 func Test_SplitChar(t *testing.T) { 128 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 129 gtest.C(t, func(t *gtest.T) { 130 j, err := gjson.DecodeToJson(data) 131 j.SetSplitChar(byte('#')) 132 t.AssertNil(err) 133 t.Assert(j.Get("n").String(), "123456789") 134 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 135 t.Assert(j.Get("m#k").String(), "v") 136 t.Assert(j.Get("a").Array(), g.Slice{1, 2, 3}) 137 t.Assert(j.Get("a#1").Int(), 2) 138 }) 139 } 140 141 func Test_ViolenceCheck(t *testing.T) { 142 data := []byte(`{"m":{"a":[1,2,3], "v1.v2":"4"}}`) 143 gtest.C(t, func(t *gtest.T) { 144 j, err := gjson.DecodeToJson(data) 145 t.AssertNil(err) 146 t.Assert(j.Get("m.a.2"), 3) 147 t.Assert(j.Get("m.v1.v2"), nil) 148 j.SetViolenceCheck(true) 149 t.Assert(j.Get("m.v1.v2"), 4) 150 }) 151 } 152 153 func Test_GetVar(t *testing.T) { 154 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 155 gtest.C(t, func(t *gtest.T) { 156 j, err := gjson.DecodeToJson(data) 157 t.AssertNil(err) 158 t.Assert(j.Get("n").String(), "123456789") 159 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 160 t.Assert(j.Get("a").Interfaces(), g.Slice{1, 2, 3}) 161 t.Assert(j.Get("a").Slice(), g.Slice{1, 2, 3}) 162 t.Assert(j.Get("a").Array(), g.Slice{1, 2, 3}) 163 }) 164 } 165 166 func Test_GetMap(t *testing.T) { 167 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 168 gtest.C(t, func(t *gtest.T) { 169 j, err := gjson.DecodeToJson(data) 170 t.AssertNil(err) 171 t.Assert(j.Get("n").Map(), nil) 172 t.Assert(j.Get("m").Map(), g.Map{"k": "v"}) 173 t.Assert(j.Get("a").Map(), g.Map{"1": "2", "3": nil}) 174 }) 175 } 176 177 func Test_GetJson(t *testing.T) { 178 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 179 gtest.C(t, func(t *gtest.T) { 180 j, err := gjson.DecodeToJson(data) 181 t.AssertNil(err) 182 j2 := j.GetJson("m") 183 t.AssertNE(j2, nil) 184 t.Assert(j2.Get("k"), "v") 185 t.Assert(j2.Get("a"), nil) 186 t.Assert(j2.Get("n"), nil) 187 }) 188 } 189 190 func Test_GetArray(t *testing.T) { 191 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 192 gtest.C(t, func(t *gtest.T) { 193 j, err := gjson.DecodeToJson(data) 194 t.AssertNil(err) 195 t.Assert(j.Get("n").Array(), g.Array{123456789}) 196 t.Assert(j.Get("m").Array(), g.Array{g.Map{"k": "v"}}) 197 t.Assert(j.Get("a").Array(), g.Array{1, 2, 3}) 198 }) 199 } 200 201 func Test_GetString(t *testing.T) { 202 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 203 gtest.C(t, func(t *gtest.T) { 204 j, err := gjson.DecodeToJson(data) 205 t.AssertNil(err) 206 t.AssertEQ(j.Get("n").String(), "123456789") 207 t.AssertEQ(j.Get("m").String(), `{"k":"v"}`) 208 t.AssertEQ(j.Get("a").String(), `[1,2,3]`) 209 t.AssertEQ(j.Get("i").String(), "") 210 }) 211 } 212 213 func Test_GetStrings(t *testing.T) { 214 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 215 gtest.C(t, func(t *gtest.T) { 216 j, err := gjson.DecodeToJson(data) 217 t.AssertNil(err) 218 t.AssertEQ(j.Get("n").Strings(), g.SliceStr{"123456789"}) 219 t.AssertEQ(j.Get("m").Strings(), g.SliceStr{`{"k":"v"}`}) 220 t.AssertEQ(j.Get("a").Strings(), g.SliceStr{"1", "2", "3"}) 221 t.AssertEQ(j.Get("i").Strings(), nil) 222 }) 223 } 224 225 func Test_GetInterfaces(t *testing.T) { 226 data := []byte(`{"n":123456789, "m":{"k":"v"}, "a":[1,2,3]}`) 227 gtest.C(t, func(t *gtest.T) { 228 j, err := gjson.DecodeToJson(data) 229 t.AssertNil(err) 230 t.AssertEQ(j.Get("n").Interfaces(), g.Array{123456789}) 231 t.AssertEQ(j.Get("m").Interfaces(), g.Array{g.Map{"k": "v"}}) 232 t.AssertEQ(j.Get("a").Interfaces(), g.Array{1, 2, 3}) 233 }) 234 } 235 236 func Test_Len(t *testing.T) { 237 gtest.C(t, func(t *gtest.T) { 238 p := gjson.New(nil) 239 p.Append("a", 1) 240 p.Append("a", 2) 241 t.Assert(p.Len("a"), 2) 242 }) 243 gtest.C(t, func(t *gtest.T) { 244 p := gjson.New(nil) 245 p.Append("a.b", 1) 246 p.Append("a.c", 2) 247 t.Assert(p.Len("a"), 2) 248 }) 249 gtest.C(t, func(t *gtest.T) { 250 p := gjson.New(nil) 251 p.Set("a", 1) 252 t.Assert(p.Len("a"), -1) 253 }) 254 } 255 256 func Test_Append(t *testing.T) { 257 gtest.C(t, func(t *gtest.T) { 258 p := gjson.New(nil) 259 p.Append("a", 1) 260 p.Append("a", 2) 261 t.Assert(p.Get("a"), g.Slice{1, 2}) 262 }) 263 gtest.C(t, func(t *gtest.T) { 264 p := gjson.New(nil) 265 p.Append("a.b", 1) 266 p.Append("a.c", 2) 267 t.Assert(p.Get("a").Map(), g.Map{ 268 "b": g.Slice{1}, 269 "c": g.Slice{2}, 270 }) 271 }) 272 gtest.C(t, func(t *gtest.T) { 273 p := gjson.New(nil) 274 p.Set("a", 1) 275 err := p.Append("a", 2) 276 t.AssertNE(err, nil) 277 t.Assert(p.Get("a"), 1) 278 }) 279 } 280 281 func Test_RawArray(t *testing.T) { 282 gtest.C(t, func(t *gtest.T) { 283 j := gjson.New(nil) 284 t.AssertNil(j.Set("0", 1)) 285 t.AssertNil(j.Set("1", 2)) 286 t.Assert(j.MustToJsonString(), `[1,2]`) 287 }) 288 289 gtest.C(t, func(t *gtest.T) { 290 j := gjson.New(nil) 291 t.AssertNil(j.Append(".", 1)) 292 t.AssertNil(j.Append(".", 2)) 293 t.Assert(j.MustToJsonString(), `[1,2]`) 294 }) 295 } 296 297 func TestJson_ToJson(t *testing.T) { 298 gtest.C(t, func(t *gtest.T) { 299 p := gjson.New(1) 300 s, e := p.ToJsonString() 301 t.Assert(e, nil) 302 t.Assert(s, "1") 303 }) 304 gtest.C(t, func(t *gtest.T) { 305 p := gjson.New("a") 306 s, e := p.ToJsonString() 307 t.Assert(e, nil) 308 t.Assert(s, `"a"`) 309 }) 310 } 311 312 func TestJson_Default(t *testing.T) { 313 gtest.C(t, func(t *gtest.T) { 314 j := gjson.New(nil) 315 t.AssertEQ(j.Get("no", 100).Int(), 100) 316 t.AssertEQ(j.Get("no", 100).String(), "100") 317 t.AssertEQ(j.Get("no", "on").Bool(), true) 318 t.AssertEQ(j.Get("no", 100).Int(), 100) 319 t.AssertEQ(j.Get("no", 100).Int8(), int8(100)) 320 t.AssertEQ(j.Get("no", 100).Int16(), int16(100)) 321 t.AssertEQ(j.Get("no", 100).Int32(), int32(100)) 322 t.AssertEQ(j.Get("no", 100).Int64(), int64(100)) 323 t.AssertEQ(j.Get("no", 100).Uint(), uint(100)) 324 t.AssertEQ(j.Get("no", 100).Uint8(), uint8(100)) 325 t.AssertEQ(j.Get("no", 100).Uint16(), uint16(100)) 326 t.AssertEQ(j.Get("no", 100).Uint32(), uint32(100)) 327 t.AssertEQ(j.Get("no", 100).Uint64(), uint64(100)) 328 t.AssertEQ(j.Get("no", 123.456).Float32(), float32(123.456)) 329 t.AssertEQ(j.Get("no", 123.456).Float64(), float64(123.456)) 330 t.AssertEQ(j.Get("no", g.Slice{1, 2, 3}).Array(), g.Slice{1, 2, 3}) 331 t.AssertEQ(j.Get("no", g.Slice{1, 2, 3}).Ints(), g.SliceInt{1, 2, 3}) 332 t.AssertEQ(j.Get("no", g.Slice{1, 2, 3}).Floats(), []float64{1, 2, 3}) 333 t.AssertEQ(j.Get("no", g.Map{"k": "v"}).Map(), g.Map{"k": "v"}) 334 t.AssertEQ(j.Get("no", 123.456).Float64(), float64(123.456)) 335 t.AssertEQ(j.GetJson("no", g.Map{"k": "v"}).Get("k").String(), "v") 336 t.AssertEQ(j.GetJsons("no", g.Slice{ 337 g.Map{"k1": "v1"}, 338 g.Map{"k2": "v2"}, 339 g.Map{"k3": "v3"}, 340 })[0].Get("k1").String(), "v1") 341 t.AssertEQ(j.GetJsonMap("no", g.Map{ 342 "m1": g.Map{"k1": "v1"}, 343 "m2": g.Map{"k2": "v2"}, 344 })["m2"].Get("k2").String(), "v2") 345 }) 346 } 347 348 func Test_Convert(t *testing.T) { 349 gtest.C(t, func(t *gtest.T) { 350 j := gjson.New(`{"name":"gf"}`) 351 arr, err := j.ToXml() 352 t.AssertNil(err) 353 t.Assert(string(arr), "<name>gf</name>") 354 arr, err = j.ToXmlIndent() 355 t.AssertNil(err) 356 t.Assert(string(arr), "<name>gf</name>") 357 str, err := j.ToXmlString() 358 t.AssertNil(err) 359 t.Assert(str, "<name>gf</name>") 360 str, err = j.ToXmlIndentString() 361 t.AssertNil(err) 362 t.Assert(str, "<name>gf</name>") 363 364 arr, err = j.ToJsonIndent() 365 t.AssertNil(err) 366 t.Assert(string(arr), "{\n\t\"name\": \"gf\"\n}") 367 str, err = j.ToJsonIndentString() 368 t.AssertNil(err) 369 t.Assert(string(arr), "{\n\t\"name\": \"gf\"\n}") 370 371 arr, err = j.ToYaml() 372 t.AssertNil(err) 373 t.Assert(string(arr), "name: gf\n") 374 str, err = j.ToYamlString() 375 t.AssertNil(err) 376 t.Assert(string(arr), "name: gf\n") 377 378 arr, err = j.ToToml() 379 t.AssertNil(err) 380 t.Assert(string(arr), "name = \"gf\"\n") 381 str, err = j.ToTomlString() 382 t.AssertNil(err) 383 t.Assert(string(arr), "name = \"gf\"\n") 384 }) 385 } 386 387 func Test_Convert2(t *testing.T) { 388 gtest.C(t, func(t *gtest.T) { 389 name := struct { 390 Name string 391 }{} 392 j := gjson.New(`{"name":"gf","time":"2019-06-12"}`) 393 t.Assert(j.Interface().(g.Map)["name"], "gf") 394 t.Assert(j.Get("name1").Map(), nil) 395 t.Assert(j.GetJson("name1"), nil) 396 t.Assert(j.GetJsons("name1"), nil) 397 t.Assert(j.GetJsonMap("name1"), nil) 398 t.Assert(j.Contains("name1"), false) 399 t.Assert(j.Get("name1").IsNil(), true) 400 t.Assert(j.Get("name").IsNil(), false) 401 t.Assert(j.Len("name1"), -1) 402 t.Assert(j.Get("time").Time().Format("2006-01-02"), "2019-06-12") 403 t.Assert(j.Get("time").GTime().Format("Y-m-d"), "2019-06-12") 404 t.Assert(j.Get("time").Duration().String(), "0s") 405 406 err := j.Var().Scan(&name) 407 t.AssertNil(err) 408 t.Assert(name.Name, "gf") 409 // j.Dump() 410 t.AssertNil(err) 411 412 j = gjson.New(`{"person":{"name":"gf"}}`) 413 err = j.Get("person").Scan(&name) 414 t.AssertNil(err) 415 t.Assert(name.Name, "gf") 416 417 j = gjson.New(`{"name":"gf""}`) 418 // j.Dump() 419 t.AssertNil(err) 420 421 j = gjson.New(`[1,2,3]`) 422 t.Assert(len(j.Var().Array()), 3) 423 }) 424 } 425 426 func Test_Basic(t *testing.T) { 427 gtest.C(t, func(t *gtest.T) { 428 j := gjson.New(`{"name":"gf","time":"2019-06-12"}`) 429 j.SetViolenceCheck(true) 430 t.Assert(j.Get(""), nil) 431 t.Assert(j.Get(".").Interface().(g.Map)["name"], "gf") 432 t.Assert(j.Get(".").Interface().(g.Map)["name1"], nil) 433 j.SetViolenceCheck(false) 434 t.Assert(j.Get(".").Interface().(g.Map)["name"], "gf") 435 436 err := j.Set("name", "gf1") 437 t.AssertNil(err) 438 t.Assert(j.Get("name"), "gf1") 439 440 j = gjson.New(`[1,2,3]`) 441 err = j.Set("\"0\".1", 11) 442 t.AssertNil(err) 443 t.Assert(j.Get("1"), 11) 444 445 j = gjson.New(`[1,2,3]`) 446 err = j.Set("11111111111111111111111", 11) 447 t.AssertNE(err, nil) 448 449 j = gjson.New(`[1,2,3]`) 450 err = j.Remove("1") 451 t.AssertNil(err) 452 t.Assert(j.Get("0"), 1) 453 t.Assert(len(j.Var().Array()), 2) 454 455 j = gjson.New(`[1,2,3]`) 456 // If index 0 is delete, its next item will be at index 0. 457 t.Assert(j.Remove("0"), nil) 458 t.Assert(j.Remove("0"), nil) 459 t.Assert(j.Remove("0"), nil) 460 t.Assert(j.Get("0"), nil) 461 t.Assert(len(j.Var().Array()), 0) 462 463 j = gjson.New(`[1,2,3]`) 464 err = j.Remove("3") 465 t.AssertNil(err) 466 t.Assert(j.Get("0"), 1) 467 t.Assert(len(j.Var().Array()), 3) 468 469 j = gjson.New(`[1,2,3]`) 470 err = j.Remove("0.3") 471 t.AssertNil(err) 472 t.Assert(j.Get("0"), 1) 473 474 j = gjson.New(`[1,2,3]`) 475 err = j.Remove("0.a") 476 t.AssertNil(err) 477 t.Assert(j.Get("0"), 1) 478 479 name := struct { 480 Name string 481 }{Name: "gf"} 482 j = gjson.New(name) 483 t.Assert(j.Get("Name"), "gf") 484 err = j.Remove("Name") 485 t.AssertNil(err) 486 t.Assert(j.Get("Name"), nil) 487 488 err = j.Set("Name", "gf1") 489 t.AssertNil(err) 490 t.Assert(j.Get("Name"), "gf1") 491 492 j = gjson.New(nil) 493 err = j.Remove("Name") 494 t.AssertNil(err) 495 t.Assert(j.Get("Name"), nil) 496 497 j = gjson.New(name) 498 t.Assert(j.Get("Name"), "gf") 499 err = j.Set("Name1", g.Map{"Name": "gf1"}) 500 t.AssertNil(err) 501 t.Assert(j.Get("Name1").Interface().(g.Map)["Name"], "gf1") 502 err = j.Set("Name2", g.Slice{1, 2, 3}) 503 t.AssertNil(err) 504 t.Assert(j.Get("Name2").Interface().(g.Slice)[0], 1) 505 err = j.Set("Name3", name) 506 t.AssertNil(err) 507 t.Assert(j.Get("Name3").Interface().(g.Map)["Name"], "gf") 508 err = j.Set("Name4", &name) 509 t.AssertNil(err) 510 t.Assert(j.Get("Name4").Interface().(g.Map)["Name"], "gf") 511 arr := [3]int{1, 2, 3} 512 err = j.Set("Name5", arr) 513 t.AssertNil(err) 514 t.Assert(j.Get("Name5").Interface().(g.Array)[0], 1) 515 516 }) 517 } 518 519 func TestJson_Var(t *testing.T) { 520 gtest.C(t, func(t *gtest.T) { 521 data := []byte("[9223372036854775807, 9223372036854775806]") 522 array := gjson.New(data).Var().Array() 523 t.Assert(array, []uint64{9223372036854776000, 9223372036854776000}) 524 }) 525 gtest.C(t, func(t *gtest.T) { 526 data := []byte("[9223372036854775807, 9223372036854775806]") 527 array := gjson.NewWithOptions(data, gjson.Options{StrNumber: true}).Var().Array() 528 t.Assert(array, []uint64{9223372036854775807, 9223372036854775806}) 529 }) 530 } 531 532 func TestJson_IsNil(t *testing.T) { 533 gtest.C(t, func(t *gtest.T) { 534 j := gjson.New(nil) 535 t.Assert(j.IsNil(), true) 536 }) 537 } 538 539 func TestJson_Set_With_Struct(t *testing.T) { 540 gtest.C(t, func(t *gtest.T) { 541 v := gjson.New(g.Map{ 542 "user1": g.Map{"name": "user1"}, 543 "user2": g.Map{"name": "user2"}, 544 "user3": g.Map{"name": "user3"}, 545 }) 546 user1 := v.GetJson("user1") 547 t.AssertNil(user1.Set("id", 111)) 548 t.AssertNil(v.Set("user1", user1)) 549 t.Assert(v.Get("user1.id"), 111) 550 }) 551 } 552 553 func TestJson_Options(t *testing.T) { 554 gtest.C(t, func(t *gtest.T) { 555 type S struct { 556 Id int64 557 } 558 s := S{ 559 Id: 53687091200, 560 } 561 m := make(map[string]interface{}) 562 t.AssertNil(gjson.DecodeTo(gjson.MustEncode(s), &m, gjson.Options{ 563 StrNumber: false, 564 })) 565 t.Assert(fmt.Sprintf(`%v`, m["Id"]), `5.36870912e+10`) 566 t.AssertNil(gjson.DecodeTo(gjson.MustEncode(s), &m, gjson.Options{ 567 StrNumber: true, 568 })) 569 t.Assert(fmt.Sprintf(`%v`, m["Id"]), `53687091200`) 570 }) 571 } 572 573 // https://github.com/wangyougui/gf/issues/1617 574 func Test_Issue1617(t *testing.T) { 575 gtest.C(t, func(t *gtest.T) { 576 type MyJsonName struct { 577 F中文 int64 `json:"F中文"` 578 F英文 int64 `json:"F英文"` 579 F法文 int64 `json:"F法文"` 580 F西班牙语 int64 `json:"F西班牙语"` 581 } 582 jso := `{"F中文":1,"F英文":2,"F法文":3,"F西班牙语":4}` 583 var a MyJsonName 584 json, err := gjson.DecodeToJson(jso) 585 t.AssertNil(err) 586 err = json.Scan(&a) 587 t.AssertNil(err) 588 t.Assert(a, MyJsonName{ 589 F中文: 1, 590 F英文: 2, 591 F法文: 3, 592 F西班牙语: 4, 593 }) 594 }) 595 } 596 597 // https://github.com/wangyougui/gf/issues/1747 598 func Test_Issue1747(t *testing.T) { 599 gtest.C(t, func(t *gtest.T) { 600 var j *gjson.Json 601 err := gconv.Struct(gvar.New("[1, 2, 336371793314971759]"), &j) 602 t.AssertNil(err) 603 t.Assert(j.Get("2"), `336371793314971759`) 604 }) 605 } 606 607 // https://github.com/wangyougui/gf/issues/2520 608 func Test_Issue2520(t *testing.T) { 609 gtest.C(t, func(t *gtest.T) { 610 type test struct { 611 Unique *gvar.Var `json:"unique"` 612 } 613 614 t2 := test{Unique: gvar.New(gtime.Date())} 615 t.Assert(gjson.MustEncodeString(t2), gjson.New(t2).MustToJsonString()) 616 }) 617 }