mirror of
https://github.com/json-iterator/go.git
synced 2025-05-13 21:36:29 +02:00
fix #184, support null as number
This commit is contained in:
parent
8f50a91be2
commit
16f78601b5
@ -441,9 +441,13 @@ type jsonNumberCodec struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
if iter.WhatIsNext() == StringValue {
|
switch iter.WhatIsNext() {
|
||||||
|
case StringValue:
|
||||||
*((*json.Number)(ptr)) = json.Number(iter.ReadString())
|
*((*json.Number)(ptr)) = json.Number(iter.ReadString())
|
||||||
} else {
|
case NilValue:
|
||||||
|
iter.skipFourBytes('n', 'u', 'l', 'l')
|
||||||
|
*((*json.Number)(ptr)) = ""
|
||||||
|
default:
|
||||||
*((*json.Number)(ptr)) = json.Number([]byte(iter.readNumberAsString()))
|
*((*json.Number)(ptr)) = json.Number([]byte(iter.readNumberAsString()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -464,9 +468,13 @@ type jsoniterNumberCodec struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
if iter.WhatIsNext() == StringValue {
|
switch iter.WhatIsNext() {
|
||||||
|
case StringValue:
|
||||||
*((*Number)(ptr)) = Number(iter.ReadString())
|
*((*Number)(ptr)) = Number(iter.ReadString())
|
||||||
} else {
|
case NilValue:
|
||||||
|
iter.skipFourBytes('n', 'u', 'l', 'l')
|
||||||
|
*((*Number)(ptr)) = ""
|
||||||
|
default:
|
||||||
*((*Number)(ptr)) = Number([]byte(iter.readNumberAsString()))
|
*((*Number)(ptr)) = Number([]byte(iter.readNumberAsString()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -518,6 +518,18 @@ func Test_non_numeric_as_number(t *testing.T) {
|
|||||||
should.Equal("500", string(v2))
|
should.Equal("500", string(v2))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_null_as_number(t *testing.T) {
|
||||||
|
should := require.New(t)
|
||||||
|
var v1 json.Number
|
||||||
|
err := json.Unmarshal([]byte(`null`), &v1)
|
||||||
|
should.Nil(err)
|
||||||
|
should.Equal("", string(v1))
|
||||||
|
var v2 Number
|
||||||
|
err = Unmarshal([]byte(`null`), &v2)
|
||||||
|
should.Nil(err)
|
||||||
|
should.Equal("", string(v2))
|
||||||
|
}
|
||||||
|
|
||||||
func Benchmark_jsoniter_encode_int(b *testing.B) {
|
func Benchmark_jsoniter_encode_int(b *testing.B) {
|
||||||
stream := NewStream(ConfigDefault, ioutil.Discard, 64)
|
stream := NewStream(ConfigDefault, ioutil.Discard, 64)
|
||||||
for n := 0; n < b.N; n++ {
|
for n := 0; n < b.N; n++ {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user