1
0
mirror of https://github.com/json-iterator/go.git synced 2025-12-20 23:30:38 +02:00

support map of interface{}

This commit is contained in:
Tao Wen
2017-01-25 22:43:57 +08:00
parent 94ae645ab9
commit f1c4dbde29
8 changed files with 193 additions and 7 deletions

View File

@@ -14,9 +14,14 @@ type Any interface {
Keys() []string
IterateObject() (func() (string, Any, bool), bool)
IterateArray() (func() (Any, bool), bool)
GetArray() []Any
SetArray(newList []Any) bool
GetObject() map[string]Any
SetObject(map[string]Any) bool
WriteTo(stream *Stream)
}
type baseAny struct {}
type baseAny struct{}
func (any *baseAny) Get(path ...interface{}) Any {
return &invalidAny{}
@@ -38,6 +43,29 @@ func (any *baseAny) IterateArray() (func() (Any, bool), bool) {
return nil, false
}
func (any *baseAny) GetArray() []Any {
return []Any{}
}
func (any *baseAny) SetArray(newList []Any) bool {
return false
}
func (any *baseAny) GetObject() map[string]Any {
return map[string]Any{}
}
func (any *baseAny) SetObject(map[string]Any) bool {
return false
}
func (any *baseAny) WriteTo(stream *Stream) {
}
func WrapInt64(val int64) Any {
return &intAny{baseAny{}, nil, val}
}
func (iter *Iterator) ReadAny() Any {
return iter.readAny(nil)
}
@@ -81,7 +109,7 @@ func (iter *Iterator) readNumberAny(reusableIter *Iterator) Any {
lazyBuf = append(lazyBuf, iter.buf[iter.head:i]...)
iter.head = i
if dotFound {
return &floatLazyAny{baseAny{},lazyBuf, reusableIter, nil, 0}
return &floatLazyAny{baseAny{}, lazyBuf, reusableIter, nil, 0}
} else {
return &intLazyAny{baseAny{}, lazyBuf, reusableIter, nil, 0}
}
@@ -175,7 +203,7 @@ func (iter *Iterator) readArrayAny(reusableIter *Iterator) Any {
if level == 0 {
iter.head = i + 1
lazyBuf = append(lazyBuf, iter.buf[start:iter.head]...)
return &arrayLazyAny{baseAny{},lazyBuf, reusableIter, nil, nil, lazyBuf}
return &arrayLazyAny{baseAny{}, lazyBuf, reusableIter, nil, nil, lazyBuf}
}
}
}