Fix commit 9f1e283

Negative number were not handled properly. Reimplement the code using
official json number parsing tree (http://www.json.org/)