mirror of
https://github.com/json-iterator/go.git
synced 2025-06-06 22:36:25 +02:00
#40 support UseNumber
This commit is contained in:
parent
6509ba05df
commit
962a8cd303
@ -2,9 +2,11 @@ package jsoniter
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
|
||||||
"io"
|
"io"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"errors"
|
||||||
|
"unsafe"
|
||||||
|
"encoding/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Unmarshal adapts to json/encoding Unmarshal API
|
// Unmarshal adapts to json/encoding Unmarshal API
|
||||||
@ -147,6 +149,16 @@ func (adapter *AdaptedDecoder) Buffered() io.Reader {
|
|||||||
return bytes.NewReader(remaining)
|
return bytes.NewReader(remaining)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (decoder *AdaptedDecoder) UseNumber() {
|
||||||
|
RegisterTypeDecoder("interface {}", func(ptr unsafe.Pointer, iter *Iterator) {
|
||||||
|
if iter.WhatIsNext() == Number {
|
||||||
|
*((*interface{})(ptr)) = json.Number(iter.readNumberAsString())
|
||||||
|
} else {
|
||||||
|
*((*interface{})(ptr)) = iter.Read()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func NewEncoder(writer io.Writer) *AdaptedEncoder {
|
func NewEncoder(writer io.Writer) *AdaptedEncoder {
|
||||||
stream := NewStream(writer, 512)
|
stream := NewStream(writer, 512)
|
||||||
return &AdaptedEncoder{stream}
|
return &AdaptedEncoder{stream}
|
||||||
|
@ -43,4 +43,18 @@ func Test_new_encoder(t *testing.T) {
|
|||||||
encoder2 := NewEncoder(buf2)
|
encoder2 := NewEncoder(buf2)
|
||||||
encoder2.Encode([]int{1})
|
encoder2.Encode([]int{1})
|
||||||
should.Equal("[1]", buf2.String())
|
should.Equal("[1]", buf2.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_use_number(t *testing.T) {
|
||||||
|
should := require.New(t)
|
||||||
|
decoder1 := json.NewDecoder(bytes.NewBufferString(`123`))
|
||||||
|
decoder1.UseNumber()
|
||||||
|
decoder2 := NewDecoder(bytes.NewBufferString(`123`))
|
||||||
|
decoder2.UseNumber()
|
||||||
|
var obj1 interface{}
|
||||||
|
should.Nil(decoder1.Decode(&obj1))
|
||||||
|
should.Equal(json.Number("123"), obj1)
|
||||||
|
var obj2 interface{}
|
||||||
|
should.Nil(decoder2.Decode(&obj2))
|
||||||
|
should.Equal(json.Number("123"), obj2)
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user