mirror of
https://github.com/json-iterator/go.git
synced 2025-01-23 18:54:21 +02:00
fix #227, fix empty json.Number
This commit is contained in:
parent
e78b7e89b6
commit
c39a632e65
@ -458,11 +458,21 @@ func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||
}
|
||||
|
||||
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) {
|
||||
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 {
|
||||
@ -485,11 +495,21 @@ func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||
}
|
||||
|
||||
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) {
|
||||
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 {
|
||||
|
@ -524,10 +524,16 @@ func Test_null_as_number(t *testing.T) {
|
||||
err := json.Unmarshal([]byte(`null`), &v1)
|
||||
should.Nil(err)
|
||||
should.Equal("", string(v1))
|
||||
output, err := json.Marshal(v1)
|
||||
should.NoError(err)
|
||||
should.Equal("0", string(output))
|
||||
var v2 Number
|
||||
err = Unmarshal([]byte(`null`), &v2)
|
||||
should.Nil(err)
|
||||
should.Equal("", string(v2))
|
||||
output, err = Marshal(v2)
|
||||
should.NoError(err)
|
||||
should.Equal("0", string(output))
|
||||
}
|
||||
|
||||
func Test_float_as_int(t *testing.T) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user