A tiny little JSON parsing library
~150 lines of C99
Zero-allocations with minimal state
Error messages with line:column: location
location No number parsing: strtod , atoi ? Handle them how you want
, ? Handle them how you want No string parsing: bring your own unicode surrogate pair handling (or don't)
Usage
A small program to load a rectangle from a JSON string into a Rect struct:
char * json_text = "{ \"x\": 10, \"y\": 20, \"w\": 30, \"h\": 40 }" ; typedef struct { int x , y , w , h ; } Rect ; bool eq ( sj_Value val , char * s ) { size_t len = val . end - val . start ; return strlen ( s ) == len && ! memcmp ( s , val . start , len ); } int main ( void ) { Rect rect = { 0 }; sj_Reader r = sj_reader ( json_text , strlen ( json_text )); sj_Value obj = sj_read ( & r ); sj_Value key , val ; while ( sj_iter_object ( & r , obj , & key , & val )) { if ( eq ( key , "x" )) { rect . x = atoi ( val . start ); } if ( eq ( key , "y" )) { rect . y = atoi ( val . start ); } if ( eq ( key , "w" )) { rect . w = atoi ( val . start ); } if ( eq ( key , "h" )) { rect . h = atoi ( val . start ); } } printf ( "rect: { %d, %d, %d, %d }
" , rect . x , rect . y , rect . w , rect . h ); return 0 ; }
See the demo folder for further usage examples.
License
This is free and unencumbered software released into the public domain. See LICENSE for details.