mirror of
https://github.com/json-iterator/go.git
synced 2025-05-22 22:00:15 +02:00
array any support get all
This commit is contained in:
parent
edb96991a8
commit
498ab96d90
@ -213,14 +213,28 @@ func (any *arrayLazyAny) Get(path ...interface{}) Any {
|
|||||||
return any
|
return any
|
||||||
}
|
}
|
||||||
var element Any
|
var element Any
|
||||||
idx, ok := path[0].(int)
|
switch firstPath := path[0].(type) {
|
||||||
if ok {
|
case int:
|
||||||
element = any.fillCacheUntil(idx)
|
element = any.fillCacheUntil(firstPath)
|
||||||
if element == nil {
|
if element == nil {
|
||||||
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", idx, any.cache)}
|
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", firstPath, any.cache)}
|
||||||
}
|
}
|
||||||
} else {
|
case int32:
|
||||||
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", idx, any.cache)}
|
if '*' == firstPath {
|
||||||
|
any.fillCache()
|
||||||
|
arr := make([]Any, 0, len(any.cache))
|
||||||
|
for _, element := range any.cache {
|
||||||
|
found := element.Get(path[1:]...)
|
||||||
|
if found.ValueType() != Invalid {
|
||||||
|
arr = append(arr, found)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return wrapArray(arr)
|
||||||
|
} else {
|
||||||
|
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", path[0], any.cache)}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", path[0], any.cache)}
|
||||||
}
|
}
|
||||||
if len(path) == 1 {
|
if len(path) == 1 {
|
||||||
return element
|
return element
|
||||||
@ -445,14 +459,28 @@ func (any *arrayAny) Get(path ...interface{}) Any {
|
|||||||
return any
|
return any
|
||||||
}
|
}
|
||||||
var element Any
|
var element Any
|
||||||
idx, ok := path[0].(int)
|
switch firstPath := path[0].(type) {
|
||||||
if ok {
|
case int:
|
||||||
element = any.fillCacheUntil(idx)
|
element = any.fillCacheUntil(firstPath)
|
||||||
if element == nil {
|
if element == nil {
|
||||||
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", idx, any.cache)}
|
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", firstPath, any.cache)}
|
||||||
}
|
}
|
||||||
} else {
|
case int32:
|
||||||
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", idx, any.cache)}
|
if '*' == firstPath {
|
||||||
|
any.fillCache()
|
||||||
|
arr := make([]Any, 0, len(any.cache))
|
||||||
|
for _, element := range any.cache {
|
||||||
|
found := element.Get(path[1:]...)
|
||||||
|
if found.ValueType() != Invalid {
|
||||||
|
arr = append(arr, found)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return wrapArray(arr)
|
||||||
|
} else {
|
||||||
|
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", path[0], any.cache)}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
element = &invalidAny{baseAny{}, fmt.Errorf("%v not found in %v", path[0], any.cache)}
|
||||||
}
|
}
|
||||||
if len(path) == 1 {
|
if len(path) == 1 {
|
||||||
return element
|
return element
|
||||||
|
@ -114,6 +114,16 @@ func Test_array_lazy_any_get_all(t *testing.T) {
|
|||||||
should.Equal("[1,2,3]", any.Get('*',0).ToString())
|
should.Equal("[1,2,3]", any.Get('*',0).ToString())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_array_wrapper_any_get_all(t *testing.T) {
|
||||||
|
should := require.New(t)
|
||||||
|
any := wrapArray([][]int{
|
||||||
|
[]int{1, 2},
|
||||||
|
[]int{3, 4},
|
||||||
|
[]int{5, 6},
|
||||||
|
})
|
||||||
|
should.Equal("[1,3,5]", any.Get('*',0).ToString())
|
||||||
|
}
|
||||||
|
|
||||||
func Test_array_lazy_any_get_invalid(t *testing.T) {
|
func Test_array_lazy_any_get_invalid(t *testing.T) {
|
||||||
should := require.New(t)
|
should := require.New(t)
|
||||||
any, err := UnmarshalAnyFromString("[]")
|
any, err := UnmarshalAnyFromString("[]")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user