Skip to content

Commit 8b208a8

Browse files
committed
remove deepcopy. #8
1 parent 1f2fa17 commit 8b208a8

2 files changed

Lines changed: 17 additions & 17 deletions

File tree

jsonpath.go

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package jsonpath
22

33
import (
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

1715
func 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

9488
func tokenize(query string) ([]string, error) {

jsonpath_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -994,3 +994,9 @@ func Test_jsonpath_num_cmp(t *testing.T) {
994994
}
995995

996996
}
997+
998+
func BenchmarkJsonPathLookup(b *testing.B) {
999+
for i := 0; i < b.N; i++ {
1000+
JsonPathLookup(json_data, "$.books[?(@.price > 20)].name")
1001+
}
1002+
}

0 commit comments

Comments
 (0)