11package jsonpath
22
33import (
4- "fmt"
5- "github.com/mohae/utilitybelt/deepcopy"
6- //"golang.org/x/tools/go/types"
74 "errors"
5+ "fmt"
86 "go/token"
97 "go/types"
108 "reflect"
@@ -16,29 +14,25 @@ var ErrGetFromNullObj = errors.New("get attribute from null object")
1614
1715func JsonPathLookup (obj interface {}, jpath string ) (interface {}, error ) {
1816 steps , err := tokenize (jpath )
19- //fmt.Println("f: steps: ", steps, err)
20- //fmt.Println(jpath, steps)
2117 if err != nil {
2218 return nil , err
2319 }
2420 if steps [0 ] != "@" && steps [0 ] != "$" {
2521 return nil , fmt .Errorf ("$ or @ should in front of path" )
2622 }
2723 steps = steps [1 :]
28- xobj := deepcopy .Iface (obj )
29- //fmt.Println("f: xobj", xobj)
3024 for _ , s := range steps {
3125 op , key , args , err := parse_token (s )
3226 // "key", "idx"
3327 switch op {
3428 case "key" :
35- xobj , err = get_key (xobj , key )
29+ obj , err = get_key (obj , key )
3630 if err != nil {
3731 return nil , err
3832 }
3933 case "idx" :
4034 //fmt.Println("idx ----------------1")
41- xobj , err = get_key (xobj , key )
35+ obj , err = get_key (obj , key )
4236 if err != nil {
4337 return nil , err
4438 }
@@ -48,16 +42,16 @@ func JsonPathLookup(obj interface{}, jpath string) (interface{}, error) {
4842 res := []interface {}{}
4943 for _ , x := range args .([]int ) {
5044 //fmt.Println("idx ---- ", x)
51- tmp , err := get_idx (xobj , x )
45+ tmp , err := get_idx (obj , x )
5246 if err != nil {
5347 return nil , err
5448 }
5549 res = append (res , tmp )
5650 }
57- xobj = res
51+ obj = res
5852 } else if len (args .([]int )) == 1 {
5953 //fmt.Println("idx ----------------3")
60- xobj , err = get_idx (xobj , args .([]int )[0 ])
54+ obj , err = get_idx (obj , args .([]int )[0 ])
6155 if err != nil {
6256 return nil , err
6357 }
@@ -66,29 +60,29 @@ func JsonPathLookup(obj interface{}, jpath string) (interface{}, error) {
6660 return nil , fmt .Errorf ("cannot index on empty slice" )
6761 }
6862 case "range" :
69- xobj , err = get_key (xobj , key )
63+ obj , err = get_key (obj , key )
7064 if err != nil {
7165 return nil , err
7266 }
7367 if argsv , ok := args .([2 ]interface {}); ok == true {
74- xobj , err = get_range (xobj , argsv [0 ], argsv [1 ])
68+ obj , err = get_range (obj , argsv [0 ], argsv [1 ])
7569 if err != nil {
7670 return nil , err
7771 }
7872 } else {
7973 return nil , fmt .Errorf ("range args length should be 2" )
8074 }
8175 case "filter" :
82- xobj , err = get_key (xobj , key )
76+ obj , err = get_key (obj , key )
8377 if err != nil {
8478 return nil , err
8579 }
86- xobj , err = get_filtered (xobj , obj , args .(string ))
80+ obj , err = get_filtered (obj , obj , args .(string ))
8781 default :
8882 return nil , fmt .Errorf ("expression don't support in filter" )
8983 }
9084 }
91- return xobj , nil
85+ return obj , nil
9286}
9387
9488func tokenize (query string ) ([]string , error ) {
0 commit comments