mirror of
https://github.com/json-iterator/go.git
synced 2025-02-13 19:41:56 +02:00
remove GetObject & GetArray from Any
This commit is contained in:
parent
f0487718f6
commit
db3f5046d7
@ -25,10 +25,6 @@ type Any interface {
|
|||||||
// TODO: add Set
|
// TODO: add Set
|
||||||
Size() int
|
Size() int
|
||||||
Keys() []string
|
Keys() []string
|
||||||
// TODO: remove me
|
|
||||||
GetArray() []Any
|
|
||||||
// TODO: remove me
|
|
||||||
GetObject() map[string]Any
|
|
||||||
GetInterface() interface{}
|
GetInterface() interface{}
|
||||||
WriteTo(stream *Stream)
|
WriteTo(stream *Stream)
|
||||||
}
|
}
|
||||||
@ -47,14 +43,6 @@ func (any *baseAny) Keys() []string {
|
|||||||
return []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{}) {
|
func (any *baseAny) ToVal(obj interface{}) {
|
||||||
panic("not implemented")
|
panic("not implemented")
|
||||||
}
|
}
|
||||||
|
@ -33,65 +33,57 @@ func (any *arrayLazyAny) ToBool() bool {
|
|||||||
func (any *arrayLazyAny) ToInt() int {
|
func (any *arrayLazyAny) ToInt() int {
|
||||||
if any.ToBool() {
|
if any.ToBool() {
|
||||||
return 1
|
return 1
|
||||||
} else {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToInt32() int32 {
|
func (any *arrayLazyAny) ToInt32() int32 {
|
||||||
if any.ToBool() {
|
if any.ToBool() {
|
||||||
return 1
|
return 1
|
||||||
} else {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToInt64() int64 {
|
func (any *arrayLazyAny) ToInt64() int64 {
|
||||||
if any.ToBool() {
|
if any.ToBool() {
|
||||||
return 1
|
return 1
|
||||||
} else {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToUint() uint {
|
func (any *arrayLazyAny) ToUint() uint {
|
||||||
if any.ToBool() {
|
if any.ToBool() {
|
||||||
return 1
|
return 1
|
||||||
} else {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToUint32() uint32 {
|
func (any *arrayLazyAny) ToUint32() uint32 {
|
||||||
if any.ToBool() {
|
if any.ToBool() {
|
||||||
return 1
|
return 1
|
||||||
} else {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToUint64() uint64 {
|
func (any *arrayLazyAny) ToUint64() uint64 {
|
||||||
if any.ToBool() {
|
if any.ToBool() {
|
||||||
return 1
|
return 1
|
||||||
} else {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToFloat32() float32 {
|
func (any *arrayLazyAny) ToFloat32() float32 {
|
||||||
if any.ToBool() {
|
if any.ToBool() {
|
||||||
return 1
|
return 1
|
||||||
} else {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToFloat64() float64 {
|
func (any *arrayLazyAny) ToFloat64() float64 {
|
||||||
if any.ToBool() {
|
if any.ToBool() {
|
||||||
return 1
|
return 1
|
||||||
} else {
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (any *arrayLazyAny) ToString() string {
|
func (any *arrayLazyAny) ToString() string {
|
||||||
@ -115,10 +107,9 @@ func (any *arrayLazyAny) Get(path ...interface{}) Any {
|
|||||||
valueBytes := locateArrayElement(iter, firstPath)
|
valueBytes := locateArrayElement(iter, firstPath)
|
||||||
if valueBytes == nil {
|
if valueBytes == nil {
|
||||||
return newInvalidAny(path)
|
return newInvalidAny(path)
|
||||||
} else {
|
|
||||||
iter.ResetBytes(valueBytes)
|
|
||||||
return locatePath(iter, path[1:])
|
|
||||||
}
|
}
|
||||||
|
iter.ResetBytes(valueBytes)
|
||||||
|
return locatePath(iter, path[1:])
|
||||||
case int32:
|
case int32:
|
||||||
if '*' == firstPath {
|
if '*' == firstPath {
|
||||||
iter := any.cfg.BorrowIterator(any.buf)
|
iter := any.cfg.BorrowIterator(any.buf)
|
||||||
@ -132,9 +123,8 @@ func (any *arrayLazyAny) Get(path ...interface{}) Any {
|
|||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
return wrapArray(arr)
|
return wrapArray(arr)
|
||||||
} else {
|
|
||||||
return newInvalidAny(path)
|
|
||||||
}
|
}
|
||||||
|
return newInvalidAny(path)
|
||||||
default:
|
default:
|
||||||
return newInvalidAny(path)
|
return newInvalidAny(path)
|
||||||
}
|
}
|
||||||
@ -152,17 +142,6 @@ func (any *arrayLazyAny) Size() int {
|
|||||||
return size
|
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) {
|
func (any *arrayLazyAny) WriteTo(stream *Stream) {
|
||||||
stream.Write(any.buf)
|
stream.Write(any.buf)
|
||||||
}
|
}
|
||||||
@ -279,9 +258,8 @@ func (any *arrayAny) Get(path ...interface{}) Any {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return wrapArray(mappedAll)
|
return wrapArray(mappedAll)
|
||||||
} else {
|
|
||||||
return newInvalidAny(path)
|
|
||||||
}
|
}
|
||||||
|
return newInvalidAny(path)
|
||||||
default:
|
default:
|
||||||
return newInvalidAny(path)
|
return newInvalidAny(path)
|
||||||
}
|
}
|
||||||
@ -291,14 +269,6 @@ func (any *arrayAny) Size() int {
|
|||||||
return any.val.Len()
|
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) {
|
func (any *arrayAny) WriteTo(stream *Stream) {
|
||||||
stream.WriteVal(any.val)
|
stream.WriteVal(any.val)
|
||||||
}
|
}
|
||||||
|
@ -69,9 +69,8 @@ func (any *invalidAny) WriteTo(stream *Stream) {
|
|||||||
func (any *invalidAny) Get(path ...interface{}) Any {
|
func (any *invalidAny) Get(path ...interface{}) Any {
|
||||||
if any.err == nil {
|
if any.err == nil {
|
||||||
return &invalidAny{baseAny{}, fmt.Errorf("get %v from invalid", path)}
|
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 {
|
func (any *invalidAny) Parse() *Iterator {
|
||||||
|
@ -81,10 +81,9 @@ func (any *objectLazyAny) Get(path ...interface{}) Any {
|
|||||||
valueBytes := locateObjectField(iter, firstPath)
|
valueBytes := locateObjectField(iter, firstPath)
|
||||||
if valueBytes == nil {
|
if valueBytes == nil {
|
||||||
return newInvalidAny(path)
|
return newInvalidAny(path)
|
||||||
} else {
|
|
||||||
iter.ResetBytes(valueBytes)
|
|
||||||
return locatePath(iter, path[1:])
|
|
||||||
}
|
}
|
||||||
|
iter.ResetBytes(valueBytes)
|
||||||
|
return locatePath(iter, path[1:])
|
||||||
case int32:
|
case int32:
|
||||||
if '*' == firstPath {
|
if '*' == firstPath {
|
||||||
mappedAll := map[string]Any{}
|
mappedAll := map[string]Any{}
|
||||||
@ -98,9 +97,8 @@ func (any *objectLazyAny) Get(path ...interface{}) Any {
|
|||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
return wrapMap(mappedAll)
|
return wrapMap(mappedAll)
|
||||||
} else {
|
|
||||||
return newInvalidAny(path)
|
|
||||||
}
|
}
|
||||||
|
return newInvalidAny(path)
|
||||||
default:
|
default:
|
||||||
return newInvalidAny(path)
|
return newInvalidAny(path)
|
||||||
}
|
}
|
||||||
@ -130,17 +128,6 @@ func (any *objectLazyAny) Size() int {
|
|||||||
return size
|
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) {
|
func (any *objectLazyAny) WriteTo(stream *Stream) {
|
||||||
stream.Write(any.buf)
|
stream.Write(any.buf)
|
||||||
}
|
}
|
||||||
@ -243,9 +230,8 @@ func (any *objectAny) Get(path ...interface{}) Any {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return wrapMap(mappedAll)
|
return wrapMap(mappedAll)
|
||||||
} else {
|
|
||||||
return newInvalidAny(path)
|
|
||||||
}
|
}
|
||||||
|
return newInvalidAny(path)
|
||||||
default:
|
default:
|
||||||
return newInvalidAny(path)
|
return newInvalidAny(path)
|
||||||
}
|
}
|
||||||
@ -263,17 +249,6 @@ func (any *objectAny) Size() int {
|
|||||||
return any.val.NumField()
|
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) {
|
func (any *objectAny) WriteTo(stream *Stream) {
|
||||||
stream.WriteVal(any.val)
|
stream.WriteVal(any.val)
|
||||||
}
|
}
|
||||||
@ -367,9 +342,8 @@ func (any *mapAny) Get(path ...interface{}) Any {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return wrapMap(mappedAll)
|
return wrapMap(mappedAll)
|
||||||
} else {
|
|
||||||
return newInvalidAny(path)
|
|
||||||
}
|
}
|
||||||
|
return newInvalidAny(path)
|
||||||
default:
|
default:
|
||||||
value := any.val.MapIndex(reflect.ValueOf(firstPath))
|
value := any.val.MapIndex(reflect.ValueOf(firstPath))
|
||||||
if !value.IsValid() {
|
if !value.IsValid() {
|
||||||
@ -391,16 +365,6 @@ func (any *mapAny) Size() int {
|
|||||||
return any.val.Len()
|
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) {
|
func (any *mapAny) WriteTo(stream *Stream) {
|
||||||
stream.WriteVal(any.val)
|
stream.WriteVal(any.val)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user