You've already forked json-iterator
							
							
				mirror of
				https://github.com/json-iterator/go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	remove GetObject & GetArray from Any
This commit is contained in:
		| @@ -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") | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user