forked from mirror/go-json
fix stream tokenizing respecting UseNumber
This commit is contained in:
parent
3fdc55a60a
commit
865b215890
|
@ -138,8 +138,11 @@ func (s *Stream) Token() (interface{}, error) {
|
|||
s.cursor++
|
||||
case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
||||
bytes := floatBytes(s)
|
||||
s := *(*string)(unsafe.Pointer(&bytes))
|
||||
f64, err := strconv.ParseFloat(s, 64)
|
||||
str := *(*string)(unsafe.Pointer(&bytes))
|
||||
if s.UseNumber {
|
||||
return json.Number(str), nil
|
||||
}
|
||||
f64, err := strconv.ParseFloat(str, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ package json_test
|
|||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
|
@ -431,6 +432,16 @@ func TestDecodeInStream(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestDecodeStreamUseNumber(t *testing.T) {
|
||||
dec := json.NewDecoder(strings.NewReader(`3.14`))
|
||||
dec.UseNumber()
|
||||
v, err := dec.Token()
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %#v", err)
|
||||
}
|
||||
assertEq(t, "json.Number", "json.Number", fmt.Sprintf("%T", v))
|
||||
}
|
||||
|
||||
// Test from golang.org/issue/11893
|
||||
func TestHTTPDecoding(t *testing.T) {
|
||||
const raw = `{ "foo": "bar" }`
|
||||
|
|
Loading…
Reference in New Issue