@@ -417,25 +417,23 @@ func (js *jsonScanner) scanNumber(first byte) (*jsonToken, error) {
417
417
return nil , fmt .Errorf ("invalid JSON number. Position: %d" , start )
418
418
case nssDone :
419
419
js .pos = int (math .Max (0 , float64 (js .pos - 1 )))
420
- if t == jttDouble {
421
- v , err := strconv .ParseFloat (b .String (), 64 )
422
- if err != nil {
423
- return nil , err
420
+ if t != jttDouble {
421
+ v , err := strconv .ParseInt (b .String (), 10 , 64 )
422
+ if err == nil {
423
+ if v < math .MinInt32 || v > math .MaxInt32 {
424
+ return & jsonToken {t : jttInt64 , v : v , p : start }, nil
425
+ }
426
+
427
+ return & jsonToken {t : jttInt32 , v : int32 (v ), p : start }, nil
424
428
}
425
-
426
- return & jsonToken {t : t , v : v , p : start }, nil
427
429
}
428
430
429
- v , err := strconv .ParseInt (b .String (), 10 , 64 )
431
+ v , err := strconv .ParseFloat (b .String (), 64 )
430
432
if err != nil {
431
433
return nil , err
432
434
}
433
435
434
- if v < math .MinInt32 || v > math .MaxInt32 {
435
- return & jsonToken {t : t , v : v , p : start }, nil
436
- }
437
-
438
- return & jsonToken {t : jttInt32 , v : int32 (v ), p : start }, nil
436
+ return & jsonToken {t : jttDouble , v : v , p : start }, nil
439
437
}
440
438
}
441
439
}
0 commit comments