unmarshal should be struct
This commit is contained in:
@@ -23,6 +23,7 @@ const (
|
|||||||
var (
|
var (
|
||||||
errTypeMismatch = errors.New("type mismatch")
|
errTypeMismatch = errors.New("type mismatch")
|
||||||
errValueNotSettable = errors.New("value is not settable")
|
errValueNotSettable = errors.New("value is not settable")
|
||||||
|
errValueNotStruct = errors.New("value type is not struct")
|
||||||
keyUnmarshaler = NewUnmarshaler(defaultKeyName)
|
keyUnmarshaler = NewUnmarshaler(defaultKeyName)
|
||||||
cacheKeys atomic.Value
|
cacheKeys atomic.Value
|
||||||
cacheKeysLock sync.Mutex
|
cacheKeysLock sync.Mutex
|
||||||
@@ -80,6 +81,10 @@ func (u *Unmarshaler) unmarshalWithFullName(m Valuer, v interface{}, fullName st
|
|||||||
}
|
}
|
||||||
|
|
||||||
rte := reflect.TypeOf(v).Elem()
|
rte := reflect.TypeOf(v).Elem()
|
||||||
|
if rte.Kind() != reflect.Struct {
|
||||||
|
return errValueNotStruct
|
||||||
|
}
|
||||||
|
|
||||||
rve := rv.Elem()
|
rve := rv.Elem()
|
||||||
numFields := rte.NumField()
|
numFields := rte.NumField()
|
||||||
for i := 0; i < numFields; i++ {
|
for i := 0; i < numFields; i++ {
|
||||||
|
|||||||
@@ -14,6 +14,13 @@ import (
|
|||||||
// so we only can test to 62 bits.
|
// so we only can test to 62 bits.
|
||||||
const maxUintBitsToTest = 62
|
const maxUintBitsToTest = 62
|
||||||
|
|
||||||
|
func TestUnmarshalWithFullNameNotStruct(t *testing.T) {
|
||||||
|
var s map[string]interface{}
|
||||||
|
content := []byte(`{"name":"xiaoming"}`)
|
||||||
|
err := UnmarshalJsonBytes(content, &s)
|
||||||
|
assert.Equal(t, errValueNotStruct, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnmarshalWithoutTagName(t *testing.T) {
|
func TestUnmarshalWithoutTagName(t *testing.T) {
|
||||||
type inner struct {
|
type inner struct {
|
||||||
Optional bool `key:",optional"`
|
Optional bool `key:",optional"`
|
||||||
|
|||||||
Reference in New Issue
Block a user