MCPcopy
hub / github.com/kubernetes/client-go / evalRecursive

Method evalRecursive

util/jsonpath/jsonpath.go:407–440  ·  view source on GitHub ↗

evalRecursive visits the given value recursively and pushes all of them to result

(input []reflect.Value, node *RecursiveNode)

Source from the content-addressed store, hash-verified

405
406// evalRecursive visits the given value recursively and pushes all of them to result
407func (j *JSONPath) evalRecursive(input []reflect.Value, node *RecursiveNode) ([]reflect.Value, error) {
408 result := []reflect.Value{}
409 for _, value := range input {
410 results := []reflect.Value{}
411 value, isNil := template.Indirect(value)
412 if isNil {
413 continue
414 }
415
416 kind := value.Kind()
417 if kind == reflect.Struct {
418 for i := 0; i < value.NumField(); i++ {
419 results = append(results, value.Field(i))
420 }
421 } else if kind == reflect.Map {
422 for _, key := range value.MapKeys() {
423 results = append(results, value.MapIndex(key))
424 }
425 } else if kind == reflect.Array || kind == reflect.Slice || kind == reflect.String {
426 for i := 0; i < value.Len(); i++ {
427 results = append(results, value.Index(i))
428 }
429 }
430 if len(results) != 0 {
431 result = append(result, value)
432 output, err := j.evalRecursive(results, node)
433 if err != nil {
434 return result, err
435 }
436 result = append(result, output...)
437 }
438 }
439 return result, nil
440}
441
442// evalFilter filters array according to FilterNode
443func (j *JSONPath) evalFilter(input []reflect.Value, node *FilterNode) ([]reflect.Value, error) {

Callers 1

walkMethod · 0.95

Calls 2

LenMethod · 0.65
IndexMethod · 0.65

Tested by

no test coverage detected