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 #227, fix empty json.Number
This commit is contained in:
		| @@ -458,11 +458,21 @@ func (codec *jsonNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { | ||||
| } | ||||
|  | ||||
| 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) { | ||||
| 	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 { | ||||
| @@ -485,11 +495,21 @@ func (codec *jsoniterNumberCodec) Decode(ptr unsafe.Pointer, iter *Iterator) { | ||||
| } | ||||
|  | ||||
| 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) { | ||||
| 	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 { | ||||
|   | ||||
| @@ -524,10 +524,16 @@ func Test_null_as_number(t *testing.T) { | ||||
| 	err := json.Unmarshal([]byte(`null`), &v1) | ||||
| 	should.Nil(err) | ||||
| 	should.Equal("", string(v1)) | ||||
| 	output, err := json.Marshal(v1) | ||||
| 	should.NoError(err) | ||||
| 	should.Equal("0", string(output)) | ||||
| 	var v2 Number | ||||
| 	err = Unmarshal([]byte(`null`), &v2) | ||||
| 	should.Nil(err) | ||||
| 	should.Equal("", string(v2)) | ||||
| 	output, err = Marshal(v2) | ||||
| 	should.NoError(err) | ||||
| 	should.Equal("0", string(output)) | ||||
| } | ||||
|  | ||||
| func Test_float_as_int(t *testing.T) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user