code: func (j *JSONPath) evalField(input []reflect.Value, node *FieldNode) ([]reflect.Value, error) {
  	results := []reflect.Value{}
  	// If there's no input, there's no output
  	if len(input) == 0 {
  		return results, nil
  	}
  	for _, value := range input {
  		var result reflect.Value
  		value, isNil := template.Indirect(value)
  		if isNil {
  			continue
  		}
  
  		if value.Kind() == reflect.Struct {
  			var err error
  			if result, err = j.findFieldInValue(&value, node); err != nil {
  				return nil, err
  			}
  		} else if value.Kind() == reflect.Map {
  			result = value.MapIndex(reflect.ValueOf(node.Value))
  		}
  		if result.IsValid() {
  			results = append(results, result)
  		}
  	}
  	if len(results) == 0 {
  		return results, fmt.Errorf("%s is not found", node.Value)
  	}
  	return results, nil
  }
docs: // evalField evaluates filed of struct or key of map.