1818 MalformedValueError = errors .New ("Value looks like Number/Boolean/None, but can't find its end: ',' or '}' symbol" )
1919 OverflowIntegerError = errors .New ("Value is number, but overflowed while parsing" )
2020 MalformedStringEscapeError = errors .New ("Encountered an invalid escape sequence in a string" )
21+ NullValueError = errors .New ("Value is null" )
2122)
2223
2324// How much stack space to allocate for unescaping JSON strings; if a string longer
@@ -311,7 +312,7 @@ func searchKeys(data []byte, keys ...string) int {
311312 case '[' :
312313 // If we want to get array element by index
313314 if keyLevel == level && keys [level ][0 ] == '[' {
314- var keyLen = len (keys [level ])
315+ keyLen : = len (keys [level ])
315316 if keyLen < 3 || keys [level ][0 ] != '[' || keys [level ][keyLen - 1 ] != ']' {
316317 return - 1
317318 }
@@ -322,7 +323,7 @@ func searchKeys(data []byte, keys ...string) int {
322323 var curIdx int
323324 var valueFound []byte
324325 var valueOffset int
325- var curI = i
326+ curI : = i
326327 ArrayEach (data [i :], func (value []byte , dataType ValueType , offset int , err error ) {
327328 if curIdx == aIdx {
328329 valueFound = value
@@ -1191,6 +1192,9 @@ func GetString(data []byte, keys ...string) (val string, err error) {
11911192 }
11921193
11931194 if t != String {
1195+ if t == Null {
1196+ return "" , NullValueError
1197+ }
11941198 return "" , fmt .Errorf ("Value is not a string: %s" , string (v ))
11951199 }
11961200
@@ -1213,6 +1217,9 @@ func GetFloat(data []byte, keys ...string) (val float64, err error) {
12131217 }
12141218
12151219 if t != Number {
1220+ if t == Null {
1221+ return 0 , NullValueError
1222+ }
12161223 return 0 , fmt .Errorf ("Value is not a number: %s" , string (v ))
12171224 }
12181225
@@ -1229,6 +1236,9 @@ func GetInt(data []byte, keys ...string) (val int64, err error) {
12291236 }
12301237
12311238 if t != Number {
1239+ if t == Null {
1240+ return 0 , NullValueError
1241+ }
12321242 return 0 , fmt .Errorf ("Value is not a number: %s" , string (v ))
12331243 }
12341244
@@ -1246,6 +1256,9 @@ func GetBoolean(data []byte, keys ...string) (val bool, err error) {
12461256 }
12471257
12481258 if t != Boolean {
1259+ if t == Null {
1260+ return false , NullValueError
1261+ }
12491262 return false , fmt .Errorf ("Value is not a boolean: %s" , string (v ))
12501263 }
12511264
0 commit comments