Skip to content

Commit a0fc844

Browse files
committed
Less magic when checking booleans and nulls
1 parent 056c7e4 commit a0fc844

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

parser.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,11 @@ func searchKeys(data []byte, keys ...string) int {
123123
data[i] == ':' && // if string is a Key, and key level match
124124
keyLevel == level-1 && // If key nesting level match current object nested level
125125
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+
}
131131
}
132132
case '{':
133133
level++
@@ -157,6 +157,12 @@ const (
157157
Unknown
158158
)
159159

160+
var (
161+
trueLiteral = []byte("true")
162+
falseLiteral = []byte("false")
163+
nullLiteral = []byte("null")
164+
)
165+
160166
/*
161167
Get - Receives data structure, and key path to extract value from.
162168
@@ -222,17 +228,17 @@ func Get(data []byte, keys ...string) (value []byte, dataType int, offset int, e
222228
return nil, dataType, offset, errors.New("Value looks like Number/Boolean/None, but can't find its end: ',' or '}' symbol")
223229
}
224230

225-
value := unsafeBytesToString(data[offset : endOffset+end])
231+
value := data[offset : endOffset+end]
226232

227233
switch data[offset] {
228234
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) {
230236
dataType = Boolean
231237
} else {
232238
return nil, Unknown, offset, errors.New("Unknown value type")
233239
}
234240
case 'u', 'n': // undefined or null
235-
if len(value) == 4 && value == "null" {
241+
if bytes.Equal(value, nullLiteral) {
236242
dataType = Null
237243
} else {
238244
return nil, Unknown, offset, errors.New("Unknown value type")

parser_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ var getBoolTests = []Test{
354354
path: []string{"a"},
355355
isErr: true,
356356
},
357-
Test{
357+
Test{
358358
desc: `read boolean true with whitespace and another key`,
359359
json: "{\r\t\n \"a\"\r\t\n :\r\t\n true\r\t\n ,\r\t\n \"b\": 1}",
360360
path: []string{"a"},

0 commit comments

Comments
 (0)