mirror of
https://github.com/json-iterator/go.git
synced 2025-04-26 11:42:56 +02:00
array is just like struct, one element case special for interface{
This commit is contained in:
parent
a6673c983a
commit
e6c24947ee
@ -56,7 +56,16 @@ func (encoder *arrayEncoder) EncodeInterface(val interface{}, stream *Stream) {
|
|||||||
stream.WriteArrayEnd()
|
stream.WriteArrayEnd()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
WriteToStream(val, stream, encoder)
|
elemType := encoder.arrayType.Elem()
|
||||||
|
if encoder.arrayType.Len() == 1 && (elemType.Kind() == reflect.Ptr ||elemType.Kind() == reflect.Map) {
|
||||||
|
ptr := uintptr(e.word)
|
||||||
|
e.word = unsafe.Pointer(&ptr)
|
||||||
|
}
|
||||||
|
if reflect.TypeOf(val).Kind() == reflect.Ptr {
|
||||||
|
encoder.Encode(unsafe.Pointer(&e.word), stream)
|
||||||
|
} else {
|
||||||
|
encoder.Encode(e.word, stream)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (encoder *arrayEncoder) IsEmpty(ptr unsafe.Pointer) bool {
|
func (encoder *arrayEncoder) IsEmpty(ptr unsafe.Pointer) bool {
|
||||||
|
@ -233,7 +233,7 @@ func Test_struct_with_not_nil_embedded(t *testing.T) {
|
|||||||
should.Equal("1", obj.Field0)
|
should.Equal("1", obj.Field0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_array_with_one_nil(t *testing.T) {
|
func Test_array_with_one_nil_ptr(t *testing.T) {
|
||||||
obj := [1]*float64{nil}
|
obj := [1]*float64{nil}
|
||||||
should := require.New(t)
|
should := require.New(t)
|
||||||
output, err := MarshalToString(obj)
|
output, err := MarshalToString(obj)
|
||||||
@ -241,6 +241,15 @@ func Test_array_with_one_nil(t *testing.T) {
|
|||||||
should.Equal(`[null]`, output)
|
should.Equal(`[null]`, output)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_array_with_one_not_nil_ptr(t *testing.T) {
|
||||||
|
two := float64(2)
|
||||||
|
obj := [1]*float64{&two}
|
||||||
|
should := require.New(t)
|
||||||
|
output, err := MarshalToString(obj)
|
||||||
|
should.Nil(err)
|
||||||
|
should.Equal(`[2]`, output)
|
||||||
|
}
|
||||||
|
|
||||||
func Test_embedded_array_with_one_nil(t *testing.T) {
|
func Test_embedded_array_with_one_nil(t *testing.T) {
|
||||||
type TestObject struct {
|
type TestObject struct {
|
||||||
Field1 int
|
Field1 int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user