1
0
mirror of https://github.com/json-iterator/go.git synced 2025-03-20 20:54:55 +02:00

test array of interface

This commit is contained in:
Tao Wen 2017-01-09 21:00:01 +08:00
parent 1f0a0e9a2d
commit a57c8c6202
3 changed files with 23 additions and 3 deletions

View File

@ -398,7 +398,7 @@ func decoderOfType(typ reflect.Type) (Decoder, error) {
case reflect.Bool:
return &boolCodec{}, nil
case reflect.Interface:
return &interfaceDecoder{}, nil
return &interfaceCodec{}, nil
case reflect.Struct:
return prefix(fmt.Sprintf("[%s]", typeName)).addToDecoder(decoderOfStruct(typ))
case reflect.Slice:
@ -443,6 +443,8 @@ func encoderOfType(typ reflect.Type) (Encoder, error) {
return &float64Codec{}, nil
case reflect.Bool:
return &boolCodec{}, nil
case reflect.Interface:
return &interfaceCodec{}, nil
case reflect.Struct:
return prefix(fmt.Sprintf("[%s]", typeName)).addToEncoder(encoderOfStruct(typ))
case reflect.Slice:

View File

@ -156,13 +156,17 @@ func (codec *boolCodec) encode(ptr unsafe.Pointer, stream *Stream) {
stream.WriteBool(*((*bool)(ptr)))
}
type interfaceDecoder struct {
type interfaceCodec struct {
}
func (decoder *interfaceDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
func (codec *interfaceCodec) decode(ptr unsafe.Pointer, iter *Iterator) {
*((*interface{})(ptr)) = iter.ReadAny().Get()
}
func (codec *interfaceCodec) encode(ptr unsafe.Pointer, stream *Stream) {
stream.WriteVal(*((*interface{})(ptr)))
}
type anyDecoder struct {
}

View File

@ -0,0 +1,14 @@
package jsoniter
import (
"testing"
"github.com/json-iterator/go/require"
)
func Test_write_array_of_interface(t *testing.T) {
should := require.New(t)
array := []interface{}{"hello"}
str, err := MarshalToString(array)
should.Nil(err)
should.Equal(`["hello"]`, str)
}