zserge / jsmn

Jsmn is a world fastest JSON parser/tokenizer. This is the official repo replacing the old one at Bitbucket
MIT License
3.65k stars 778 forks source link

Problems parsing number with JSMN_STRICT is defined #177

Open mulle-nat opened 4 years ago

mulle-nat commented 4 years ago

If you define JSMN_STRICT, then parsing a simple number doesn't work anymore (it does if you undefine JSMN_STRICT):

#define JSMN_STRICT
#include "jsmn.h"
#include <stdio.h>
#include <string.h>

static char  *json = "1";

int main( void)
{
   jsmn_parser   p;
   jsmntok_t     t[128];
   int           r;

   jsmn_init( &p);
   r = jsmn_parse(&p, json, strlen( json), t, 128);
   if( r < 0) 
   {
      printf("Failed to parse JSON: %d\n", r);
      return 1;
   }
   return( 0);
}

This will bail with error 2.

pt300 commented 4 years ago

Currently JSMN does not allow anything else than object or array as the root value. This is going to be fixed in the future.

mulle-nat commented 4 years ago

Well it does work, if you don't define JSMN_STRICT though. So your comment isn't entirely correct.

pt300 commented 4 years ago

Well, yeah. The non strict mode is.... special. I'd advice against using it personally. In future version it will be either gone or replaced by mode that implements proper standards.

mulle-nat commented 4 years ago

Actually I kinda like the non-strict mode, as I am using jsmn more as a tokenizer and do the verification f.e. of floating point numbers or "true" vs. "thanks" at a later stage.