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:
parent
1f0a0e9a2d
commit
a57c8c6202
@ -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:
|
||||
|
@ -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 {
|
||||
}
|
||||
|
||||
|
14
jsoniter_interface_test.go
Normal file
14
jsoniter_interface_test.go
Normal 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)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user