@@ -9,8 +9,19 @@ import (
9
9
"unsafe"
10
10
)
11
11
12
+ func tokenEnd (data []byte ) int {
13
+ for i , c := range data {
14
+ switch c {
15
+ case ' ' , '\n' , '\r' , '\t' , ',' , '}' , ']' :
16
+ return i
17
+ }
18
+ }
19
+
20
+ return - 1
21
+ }
22
+
12
23
// Find position of next character which is not ' ', ',', '}' or ']'
13
- func nextValue (data []byte , skipComma bool ) int {
24
+ func nextToken (data []byte , skipComma bool ) int {
14
25
for i , c := range data {
15
26
switch c {
16
27
case ' ' , '\n' , '\r' , '\t' :
@@ -102,7 +113,7 @@ func searchKeys(data []byte, keys ...string) int {
102
113
i += strEnd
103
114
keyEnd := i - 1
104
115
105
- valueOffset := nextValue (data [i :], true )
116
+ valueOffset := nextToken (data [i :], true )
106
117
if valueOffset == - 1 {
107
118
return - 1
108
119
}
@@ -166,7 +177,7 @@ func Get(data []byte, keys ...string) (value []byte, dataType int, offset int, e
166
177
}
167
178
168
179
// Go to closest value
169
- nO := nextValue (data [offset :], false )
180
+ nO := nextToken (data [offset :], false )
170
181
171
182
if nO == - 1 {
172
183
return []byte {}, NotExist , - 1 , errors .New ("Malformed JSON error" )
@@ -205,9 +216,7 @@ func Get(data []byte, keys ...string) (value []byte, dataType int, offset int, e
205
216
endOffset += offset
206
217
} else {
207
218
// Number, Boolean or None
208
- end := bytes .IndexFunc (data [endOffset :], func (c rune ) bool {
209
- return c == ' ' || c == '\n' || c == ',' || c == '}' || c == ']'
210
- })
219
+ end := tokenEnd (data [endOffset :])
211
220
212
221
if end == - 1 {
213
222
return nil , dataType , offset , errors .New ("Value looks like Number/Boolean/None, but can't find its end: ',' or '}' symbol" )
@@ -265,7 +274,7 @@ func ArrayEach(data []byte, cb func(value []byte, dataType int, offset int, err
265
274
}
266
275
267
276
// Go to closest value
268
- nO := nextValue (data [offset :], false )
277
+ nO := nextToken (data [offset :], false )
269
278
270
279
if nO == - 1 {
271
280
return errors .New ("Malformed JSON" )
0 commit comments