mirror of
https://github.com/json-iterator/go.git
synced 2025-03-26 21:12:40 +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:
|
case reflect.Bool:
|
||||||
return &boolCodec{}, nil
|
return &boolCodec{}, nil
|
||||||
case reflect.Interface:
|
case reflect.Interface:
|
||||||
return &interfaceDecoder{}, nil
|
return &interfaceCodec{}, nil
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
return prefix(fmt.Sprintf("[%s]", typeName)).addToDecoder(decoderOfStruct(typ))
|
return prefix(fmt.Sprintf("[%s]", typeName)).addToDecoder(decoderOfStruct(typ))
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
@ -443,6 +443,8 @@ func encoderOfType(typ reflect.Type) (Encoder, error) {
|
|||||||
return &float64Codec{}, nil
|
return &float64Codec{}, nil
|
||||||
case reflect.Bool:
|
case reflect.Bool:
|
||||||
return &boolCodec{}, nil
|
return &boolCodec{}, nil
|
||||||
|
case reflect.Interface:
|
||||||
|
return &interfaceCodec{}, nil
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
return prefix(fmt.Sprintf("[%s]", typeName)).addToEncoder(encoderOfStruct(typ))
|
return prefix(fmt.Sprintf("[%s]", typeName)).addToEncoder(encoderOfStruct(typ))
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
|
@ -156,13 +156,17 @@ func (codec *boolCodec) encode(ptr unsafe.Pointer, stream *Stream) {
|
|||||||
stream.WriteBool(*((*bool)(ptr)))
|
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()
|
*((*interface{})(ptr)) = iter.ReadAny().Get()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (codec *interfaceCodec) encode(ptr unsafe.Pointer, stream *Stream) {
|
||||||
|
stream.WriteVal(*((*interface{})(ptr)))
|
||||||
|
}
|
||||||
|
|
||||||
type anyDecoder struct {
|
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