1
0
mirror of https://github.com/json-iterator/go.git synced 2025-04-20 11:28:49 +02:00

fix #227, fix empty json.Number

This commit is contained in:
Tao Wen 2018-01-25 14:47:50 +08:00
parent e78b7e89b6
commit c39a632e65
2 changed files with 30 additions and 4 deletions

View File

@ -458,11 +458,21 @@ func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
} }
func (codec *jsonNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) { func (codec *jsonNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
stream.WriteRaw(string(*((*json.Number)(ptr)))) number := *((*json.Number)(ptr))
if len(number) == 0 {
stream.WriteRaw("0")
} else {
stream.WriteRaw(string(number))
}
} }
func (codec *jsonNumberCodec) EncodeInterface(val interface{}, stream *Stream) { func (codec *jsonNumberCodec) EncodeInterface(val interface{}, stream *Stream) {
stream.WriteRaw(string(val.(json.Number))) number := val.(json.Number)
if len(number) == 0 {
stream.WriteRaw("0")
} else {
stream.WriteRaw(string(number))
}
} }
func (codec *jsonNumberCodec) IsEmpty(ptr unsafe.Pointer) bool { func (codec *jsonNumberCodec) IsEmpty(ptr unsafe.Pointer) bool {
@ -485,11 +495,21 @@ func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
} }
func (codec *jsoniterNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) { func (codec *jsoniterNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) {
stream.WriteRaw(string(*((*Number)(ptr)))) number := *((*Number)(ptr))
if len(number) == 0 {
stream.WriteRaw("0")
} else {
stream.WriteRaw(string(number))
}
} }
func (codec *jsoniterNumberCodec) EncodeInterface(val interface{}, stream *Stream) { func (codec *jsoniterNumberCodec) EncodeInterface(val interface{}, stream *Stream) {
stream.WriteRaw(string(val.(Number))) number := val.(Number)
if len(number) == 0 {
stream.WriteRaw("0")
} else {
stream.WriteRaw(string(number))
}
} }
func (codec *jsoniterNumberCodec) IsEmpty(ptr unsafe.Pointer) bool { func (codec *jsoniterNumberCodec) IsEmpty(ptr unsafe.Pointer) bool {

View File

@ -524,10 +524,16 @@ func Test_null_as_number(t *testing.T) {
err := json.Unmarshal([]byte(`null`), &v1) err := json.Unmarshal([]byte(`null`), &v1)
should.Nil(err) should.Nil(err)
should.Equal("", string(v1)) should.Equal("", string(v1))
output, err := json.Marshal(v1)
should.NoError(err)
should.Equal("0", string(output))
var v2 Number var v2 Number
err = Unmarshal([]byte(`null`), &v2) err = Unmarshal([]byte(`null`), &v2)
should.Nil(err) should.Nil(err)
should.Equal("", string(v2)) should.Equal("", string(v2))
output, err = Marshal(v2)
should.NoError(err)
should.Equal("0", string(output))
} }
func Test_float_as_int(t *testing.T) { func Test_float_as_int(t *testing.T) {