File tree Expand file tree Collapse file tree 2 files changed +22
-2
lines changed Expand file tree Collapse file tree 2 files changed +22
-2
lines changed Original file line number Diff line number Diff line change @@ -441,7 +441,11 @@ type jsonNumberCodec struct {
441441}
442442
443443func (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+ }
445449}
446450
447451func (codec * jsonNumberCodec ) Encode (ptr unsafe.Pointer , stream * Stream ) {
@@ -460,7 +464,11 @@ type jsoniterNumberCodec struct {
460464}
461465
462466func (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+ }
464472}
465473
466474func (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) {
506506 should .Equal ("1" , str )
507507}
508508
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+
509521func Benchmark_jsoniter_encode_int (b * testing.B ) {
510522 stream := NewStream (ConfigDefault , ioutil .Discard , 64 )
511523 for n := 0 ; n < b .N ; n ++ {
You can’t perform that action at this time.
0 commit comments