Skip to content

Commit c39a632

Browse files
committed
fix #227, fix empty json.Number
1 parent e78b7e8 commit c39a632

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

feature_reflect_native.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -458,11 +458,21 @@ func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
458458
}
459459

460460
func (codec *jsonNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
461-
stream.WriteRaw(string(*((*json.Number)(ptr))))
461+
number := *((*json.Number)(ptr))
462+
if len(number) == 0 {
463+
stream.WriteRaw("0")
464+
} else {
465+
stream.WriteRaw(string(number))
466+
}
462467
}
463468

464469
func (codec *jsonNumberCodec) EncodeInterface(val interface{}, stream *Stream) {
465-
stream.WriteRaw(string(val.(json.Number)))
470+
number := val.(json.Number)
471+
if len(number) == 0 {
472+
stream.WriteRaw("0")
473+
} else {
474+
stream.WriteRaw(string(number))
475+
}
466476
}
467477

468478
func (codec *jsonNumberCodec) IsEmpty(ptr unsafe.Pointer) bool {
@@ -485,11 +495,21 @@ func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
485495
}
486496

487497
func (codec *jsoniterNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
488-
stream.WriteRaw(string(*((*Number)(ptr))))
498+
number := *((*Number)(ptr))
499+
if len(number) == 0 {
500+
stream.WriteRaw("0")
501+
} else {
502+
stream.WriteRaw(string(number))
503+
}
489504
}
490505

491506
func (codec *jsoniterNumberCodec) EncodeInterface(val interface{}, stream *Stream) {
492-
stream.WriteRaw(string(val.(Number)))
507+
number := val.(Number)
508+
if len(number) == 0 {
509+
stream.WriteRaw("0")
510+
} else {
511+
stream.WriteRaw(string(number))
512+
}
493513
}
494514

495515
func (codec *jsoniterNumberCodec) IsEmpty(ptr unsafe.Pointer) bool {

jsoniter_int_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,10 +524,16 @@ func Test_null_as_number(t *testing.T) {
524524
err := json.Unmarshal([]byte(`null`), &v1)
525525
should.Nil(err)
526526
should.Equal("", string(v1))
527+
output, err := json.Marshal(v1)
528+
should.NoError(err)
529+
should.Equal("0", string(output))
527530
var v2 Number
528531
err = Unmarshal([]byte(`null`), &v2)
529532
should.Nil(err)
530533
should.Equal("", string(v2))
534+
output, err = Marshal(v2)
535+
should.NoError(err)
536+
should.Equal("0", string(output))
531537
}
532538

533539
func Test_float_as_int(t *testing.T) {

0 commit comments

Comments
 (0)