You've already forked json-iterator
							
							
				mirror of
				https://github.com/json-iterator/go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	fix #181, support string as json.Number and jsoniter.Number
This commit is contained in:
		| @@ -441,7 +441,11 @@ type jsonNumberCodec struct { | ||||
| } | ||||
|  | ||||
| func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { | ||||
| 	*((*json.Number)(ptr)) = json.Number([]byte(iter.readNumberAsString())) | ||||
| 	if iter.WhatIsNext() == StringValue { | ||||
| 		*((*json.Number)(ptr)) = json.Number(iter.ReadString()) | ||||
| 	} else { | ||||
| 		*((*json.Number)(ptr)) = json.Number([]byte(iter.readNumberAsString())) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (codec *jsonNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) { | ||||
| @@ -460,7 +464,11 @@ type jsoniterNumberCodec struct { | ||||
| } | ||||
|  | ||||
| func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { | ||||
| 	*((*Number)(ptr)) = Number([]byte(iter.readNumberAsString())) | ||||
| 	if iter.WhatIsNext() == StringValue { | ||||
| 		*((*Number)(ptr)) = Number(iter.ReadString()) | ||||
| 	} else { | ||||
| 		*((*Number)(ptr)) = Number([]byte(iter.readNumberAsString())) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (codec *jsoniterNumberCodec) Encode(ptr unsafe.Pointer, stream *Stream) { | ||||
|   | ||||
| @@ -506,6 +506,18 @@ func Test_jsoniter_number(t *testing.T) { | ||||
| 	should.Equal("1", str) | ||||
| } | ||||
|  | ||||
| func Test_non_numeric_as_number(t *testing.T) { | ||||
| 	should := require.New(t) | ||||
| 	var v1 json.Number | ||||
| 	err := Unmarshal([]byte(`"500"`), &v1) | ||||
| 	should.Nil(err) | ||||
| 	should.Equal("500", string(v1)) | ||||
| 	var v2 Number | ||||
| 	err = Unmarshal([]byte(`"500"`), &v2) | ||||
| 	should.Nil(err) | ||||
| 	should.Equal("500", string(v2)) | ||||
| } | ||||
|  | ||||
| func Benchmark_jsoniter_encode_int(b *testing.B) { | ||||
| 	stream := NewStream(ConfigDefault, ioutil.Discard, 64) | ||||
| 	for n := 0; n < b.N; n++ { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user