jsonpath.go 611 B

123456789101112131415161718192021222324252627282930313233343536
  1. package jsonpath
  2. import (
  3. "fmt"
  4. "k8s.io/client-go/util/jsonpath"
  5. )
  6. func GetResult(data map[string]interface{}, query string) (interface{}, error) {
  7. js := jsonpath.New("query")
  8. err := js.Parse(query)
  9. if err != nil {
  10. return nil, err
  11. }
  12. results, err := js.FindResults(data)
  13. if err != nil {
  14. return nil, err
  15. }
  16. for _, result := range results {
  17. for _, r := range result {
  18. // if this cannot be interfaced, throw an error
  19. if !r.CanInterface() {
  20. return nil, fmt.Errorf("result cannot be interfaced")
  21. }
  22. return r.Interface(), nil
  23. }
  24. }
  25. return nil, fmt.Errorf("no query result")
  26. }