@@ -123,11 +123,11 @@ func searchKeys(data []byte, keys ...string) int {
123
123
data [i ] == ':' && // if string is a Key, and key level match
124
124
keyLevel == level - 1 && // If key nesting level match current object nested level
125
125
keys [level - 1 ] == unsafeBytesToString (data [keyBegin :keyEnd ]) {
126
- keyLevel ++
127
- // If we found all keys in path
128
- if keyLevel == lk {
129
- return i + 1
130
- }
126
+ keyLevel ++
127
+ // If we found all keys in path
128
+ if keyLevel == lk {
129
+ return i + 1
130
+ }
131
131
}
132
132
case '{' :
133
133
level ++
@@ -157,6 +157,12 @@ const (
157
157
Unknown
158
158
)
159
159
160
+ var (
161
+ trueLiteral = []byte ("true" )
162
+ falseLiteral = []byte ("false" )
163
+ nullLiteral = []byte ("null" )
164
+ )
165
+
160
166
/*
161
167
Get - Receives data structure, and key path to extract value from.
162
168
@@ -222,17 +228,17 @@ func Get(data []byte, keys ...string) (value []byte, dataType int, offset int, e
222
228
return nil , dataType , offset , errors .New ("Value looks like Number/Boolean/None, but can't find its end: ',' or '}' symbol" )
223
229
}
224
230
225
- value := unsafeBytesToString ( data [offset : endOffset + end ])
231
+ value := data [offset : endOffset + end ]
226
232
227
233
switch data [offset ] {
228
234
case 't' , 'f' : // true or false
229
- if ( len ( value ) == 4 && value == "true" ) || ( len ( value ) == 5 && value == "false" ) {
235
+ if bytes . Equal ( value , trueLiteral ) || bytes . Equal ( value , falseLiteral ) {
230
236
dataType = Boolean
231
237
} else {
232
238
return nil , Unknown , offset , errors .New ("Unknown value type" )
233
239
}
234
240
case 'u' , 'n' : // undefined or null
235
- if len (value ) == 4 && value == "null" {
241
+ if bytes . Equal (value , nullLiteral ) {
236
242
dataType = Null
237
243
} else {
238
244
return nil , Unknown , offset , errors .New ("Unknown value type" )
0 commit comments