jsmn icon indicating copy to clipboard operation
jsmn copied to clipboard

Problems parsing number with JSMN_STRICT is defined

Open mulle-nat opened this issue 4 years ago • 4 comments

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.

mulle-nat avatar Dec 18 '19 21:12 mulle-nat

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

pt300 avatar Dec 18 '19 22:12 pt300

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

mulle-nat avatar Dec 19 '19 13:12 mulle-nat

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.

pt300 avatar Dec 19 '19 14:12 pt300

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.

mulle-nat avatar Dec 19 '19 14:12 mulle-nat