@@ -3,6 +3,7 @@ package jsonpath
3
3
import (
4
4
"encoding/json"
5
5
"fmt"
6
+ "strconv"
6
7
"strings"
7
8
8
9
"github.com/evilmonkeyinc/jsonpath/token"
@@ -95,19 +96,42 @@ func (query *JSONPath) Query(root interface{}) (interface{}, error) {
95
96
// QueryString will return the result of the JSONPath query applied against the specified JSON data.
96
97
func (query * JSONPath ) QueryString (jsonData string ) (interface {}, error ) {
97
98
jsonData = strings .TrimSpace (jsonData )
99
+ if jsonData == "" {
100
+ return nil , getInvalidJSONData (errDataIsUnexpectedTypeOrNil )
101
+ }
98
102
99
103
var root interface {}
104
+
100
105
if strings .HasPrefix (jsonData , "{" ) && strings .HasSuffix (jsonData , "}" ) {
106
+ // object
101
107
root = make (map [string ]interface {})
108
+ if err := json .Unmarshal ([]byte (jsonData ), & root ); err != nil {
109
+ return nil , getInvalidJSONData (err )
110
+ }
102
111
} else if strings .HasPrefix (jsonData , "[" ) && strings .HasSuffix (jsonData , "]" ) {
112
+ // array
103
113
root = make ([]interface {}, 0 )
114
+ if err := json .Unmarshal ([]byte (jsonData ), & root ); err != nil {
115
+ return nil , getInvalidJSONData (err )
116
+ }
117
+ } else if len (jsonData ) > 2 && strings .HasPrefix (jsonData , "\" " ) && strings .HasPrefix (jsonData , "\" " ) {
118
+ // string
119
+ root = jsonData [1 : len (jsonData )- 1 ]
120
+ } else if strings .ToLower (jsonData ) == "true" {
121
+ // bool true
122
+ root = true
123
+ } else if strings .ToLower (jsonData ) == "false" {
124
+ // bool false
125
+ root = false
126
+ } else if val , err := strconv .ParseInt (jsonData , 10 , 64 ); err == nil {
127
+ // integer
128
+ root = val
129
+ } else if val , err := strconv .ParseFloat (jsonData , 64 ); err == nil {
130
+ // float
131
+ root = val
104
132
} else {
105
133
return nil , getInvalidJSONData (errDataIsUnexpectedTypeOrNil )
106
134
}
107
135
108
- if err := json .Unmarshal ([]byte (jsonData ), & root ); err != nil {
109
- return nil , getInvalidJSONData (err )
110
- }
111
-
112
136
return query .Query (root )
113
137
}
0 commit comments