1
0
mirror of https://github.com/json-iterator/go.git synced 2025-02-10 19:41:53 +02:00

remove GetObject & GetArray from Any

This commit is contained in:
Tao Wen 2017-07-09 16:15:45 +08:00
parent f0487718f6
commit db3f5046d7
4 changed files with 18 additions and 97 deletions

View File

@ -25,10 +25,6 @@ type Any interface {
// TODO: add Set
Size() int
Keys() []string
// TODO: remove me
GetArray() []Any
// TODO: remove me
GetObject() map[string]Any
GetInterface() interface{}
WriteTo(stream *Stream)
}
@ -47,14 +43,6 @@ func (any *baseAny) Keys() []string {
return []string{}
}
func (any *baseAny) GetArray() []Any {
return []Any{}
}
func (any *baseAny) GetObject() map[string]Any {
return map[string]Any{}
}
func (any *baseAny) ToVal(obj interface{}) {
panic("not implemented")
}

View File

@ -33,65 +33,57 @@ func (any *arrayLazyAny) ToBool() bool {
func (any *arrayLazyAny) ToInt() int {
if any.ToBool() {
return 1
} else {
return 0
}
return 0
}
func (any *arrayLazyAny) ToInt32() int32 {
if any.ToBool() {
return 1
} else {
return 0
}
return 0
}
func (any *arrayLazyAny) ToInt64() int64 {
if any.ToBool() {
return 1
} else {
return 0
}
return 0
}
func (any *arrayLazyAny) ToUint() uint {
if any.ToBool() {
return 1
} else {
return 0
}
return 0
}
func (any *arrayLazyAny) ToUint32() uint32 {
if any.ToBool() {
return 1
} else {
return 0
}
return 0
}
func (any *arrayLazyAny) ToUint64() uint64 {
if any.ToBool() {
return 1
} else {
return 0
}
return 0
}
func (any *arrayLazyAny) ToFloat32() float32 {
if any.ToBool() {
return 1
} else {
return 0
}
return 0
}
func (any *arrayLazyAny) ToFloat64() float64 {
if any.ToBool() {
return 1
} else {
return 0
}
return 0
}
func (any *arrayLazyAny) ToString() string {
@ -115,10 +107,9 @@ func (any *arrayLazyAny) Get(path ...interface{}) Any {
valueBytes := locateArrayElement(iter, firstPath)
if valueBytes == nil {
return newInvalidAny(path)
} else {
iter.ResetBytes(valueBytes)
return locatePath(iter, path[1:])
}
iter.ResetBytes(valueBytes)
return locatePath(iter, path[1:])
case int32:
if '*' == firstPath {
iter := any.cfg.BorrowIterator(any.buf)
@ -132,9 +123,8 @@ func (any *arrayLazyAny) Get(path ...interface{}) Any {
return true
})
return wrapArray(arr)
} else {
return newInvalidAny(path)
}
return newInvalidAny(path)
default:
return newInvalidAny(path)
}
@ -152,17 +142,6 @@ func (any *arrayLazyAny) Size() int {
return size
}
func (any *arrayLazyAny) GetArray() []Any {
elements := make([]Any, 0)
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
iter.ReadArrayCB(func(iter *Iterator) bool {
elements = append(elements, iter.ReadAny())
return true
})
return elements
}
func (any *arrayLazyAny) WriteTo(stream *Stream) {
stream.Write(any.buf)
}
@ -279,9 +258,8 @@ func (any *arrayAny) Get(path ...interface{}) Any {
}
}
return wrapArray(mappedAll)
} else {
return newInvalidAny(path)
}
return newInvalidAny(path)
default:
return newInvalidAny(path)
}
@ -291,14 +269,6 @@ func (any *arrayAny) Size() int {
return any.val.Len()
}
func (any *arrayAny) GetArray() []Any {
elements := make([]Any, any.val.Len())
for i := 0; i < any.val.Len(); i++ {
elements[i] = Wrap(any.val.Index(i).Interface())
}
return elements
}
func (any *arrayAny) WriteTo(stream *Stream) {
stream.WriteVal(any.val)
}

View File

@ -69,9 +69,8 @@ func (any *invalidAny) WriteTo(stream *Stream) {
func (any *invalidAny) Get(path ...interface{}) Any {
if any.err == nil {
return &invalidAny{baseAny{}, fmt.Errorf("get %v from invalid", path)}
} else {
return &invalidAny{baseAny{}, fmt.Errorf("%v, get %v from invalid", any.err, path)}
}
return &invalidAny{baseAny{}, fmt.Errorf("%v, get %v from invalid", any.err, path)}
}
func (any *invalidAny) Parse() *Iterator {

View File

@ -81,10 +81,9 @@ func (any *objectLazyAny) Get(path ...interface{}) Any {
valueBytes := locateObjectField(iter, firstPath)
if valueBytes == nil {
return newInvalidAny(path)
} else {
iter.ResetBytes(valueBytes)
return locatePath(iter, path[1:])
}
iter.ResetBytes(valueBytes)
return locatePath(iter, path[1:])
case int32:
if '*' == firstPath {
mappedAll := map[string]Any{}
@ -98,9 +97,8 @@ func (any *objectLazyAny) Get(path ...interface{}) Any {
return true
})
return wrapMap(mappedAll)
} else {
return newInvalidAny(path)
}
return newInvalidAny(path)
default:
return newInvalidAny(path)
}
@ -130,17 +128,6 @@ func (any *objectLazyAny) Size() int {
return size
}
func (any *objectLazyAny) GetObject() map[string]Any {
asMap := map[string]Any{}
iter := any.cfg.BorrowIterator(any.buf)
defer any.cfg.ReturnIterator(iter)
iter.ReadObjectCB(func(iter *Iterator, field string) bool {
asMap[field] = iter.ReadAny()
return true
})
return asMap
}
func (any *objectLazyAny) WriteTo(stream *Stream) {
stream.Write(any.buf)
}
@ -243,9 +230,8 @@ func (any *objectAny) Get(path ...interface{}) Any {
}
}
return wrapMap(mappedAll)
} else {
return newInvalidAny(path)
}
return newInvalidAny(path)
default:
return newInvalidAny(path)
}
@ -263,17 +249,6 @@ func (any *objectAny) Size() int {
return any.val.NumField()
}
func (any *objectAny) GetObject() map[string]Any {
object := map[string]Any{}
for i := 0; i < any.val.NumField(); i++ {
field := any.val.Field(i)
if field.CanInterface() {
object[any.val.Type().Field(i).Name] = Wrap(field.Interface())
}
}
return object
}
func (any *objectAny) WriteTo(stream *Stream) {
stream.WriteVal(any.val)
}
@ -367,9 +342,8 @@ func (any *mapAny) Get(path ...interface{}) Any {
}
}
return wrapMap(mappedAll)
} else {
return newInvalidAny(path)
}
return newInvalidAny(path)
default:
value := any.val.MapIndex(reflect.ValueOf(firstPath))
if !value.IsValid() {
@ -391,16 +365,6 @@ func (any *mapAny) Size() int {
return any.val.Len()
}
func (any *mapAny) GetObject() map[string]Any {
object := map[string]Any{}
for _, key := range any.val.MapKeys() {
keyAsStr := key.String()
element := Wrap(any.val.MapIndex(key).Interface())
object[keyAsStr] = element
}
return object
}
func (any *mapAny) WriteTo(stream *Stream) {
stream.WriteVal(any.val)
}