File tree 2 files changed +22
-2
lines changed
2 files changed +22
-2
lines changed Original file line number Diff line number Diff line change @@ -441,7 +441,11 @@ type jsonNumberCodec struct {
441
441
}
442
442
443
443
func (codec * jsonNumberCodec ) Decode (ptr unsafe.Pointer , iter * Iterator ) {
444
- * ((* json .Number )(ptr )) = json .Number ([]byte (iter .readNumberAsString ()))
444
+ if iter .WhatIsNext () == StringValue {
445
+ * ((* json .Number )(ptr )) = json .Number (iter .ReadString ())
446
+ } else {
447
+ * ((* json .Number )(ptr )) = json .Number ([]byte (iter .readNumberAsString ()))
448
+ }
445
449
}
446
450
447
451
func (codec * jsonNumberCodec ) Encode (ptr unsafe.Pointer , stream * Stream ) {
@@ -460,7 +464,11 @@ type jsoniterNumberCodec struct {
460
464
}
461
465
462
466
func (codec * jsoniterNumberCodec ) Decode (ptr unsafe.Pointer , iter * Iterator ) {
463
- * ((* Number )(ptr )) = Number ([]byte (iter .readNumberAsString ()))
467
+ if iter .WhatIsNext () == StringValue {
468
+ * ((* Number )(ptr )) = Number (iter .ReadString ())
469
+ } else {
470
+ * ((* Number )(ptr )) = Number ([]byte (iter .readNumberAsString ()))
471
+ }
464
472
}
465
473
466
474
func (codec * jsoniterNumberCodec ) Encode (ptr unsafe.Pointer , stream * Stream ) {
Original file line number Diff line number Diff line change @@ -506,6 +506,18 @@ func Test_jsoniter_number(t *testing.T) {
506
506
should .Equal ("1" , str )
507
507
}
508
508
509
+ func Test_non_numeric_as_number (t * testing.T ) {
510
+ should := require .New (t )
511
+ var v1 json.Number
512
+ err := Unmarshal ([]byte (`"500"` ), & v1 )
513
+ should .Nil (err )
514
+ should .Equal ("500" , string (v1 ))
515
+ var v2 Number
516
+ err = Unmarshal ([]byte (`"500"` ), & v2 )
517
+ should .Nil (err )
518
+ should .Equal ("500" , string (v2 ))
519
+ }
520
+
509
521
func Benchmark_jsoniter_encode_int (b * testing.B ) {
510
522
stream := NewStream (ConfigDefault , ioutil .Discard , 64 )
511
523
for n := 0 ; n < b .N ; n ++ {
You can’t perform that action at this time.
0 commit comments