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:
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) {
|
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 {
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user