json lib
Dependents: grove_stream_jpa_sd2 grove_stream_jpa_sd2 grove_stream_jpa_sd2-2 grove_stream_jpa_sd2-3 ... more
Diff: jsmn.h
- Revision:
- 3:fab591fca1e7
- Child:
- 5:dd98cf00ed9b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jsmn.h Thu Jun 02 06:08:24 2016 +0000 @@ -0,0 +1,83 @@ +#ifndef __JSMN_H_ +#define __JSMN_H_ + +#include <stddef.h> + +#ifdef __cplusplus +extern "C" +{ +#endif + /* + Modified version of standard jsmn lib ... added a type "JSMN_KEY" and enabled + parent-pointers and strict JSON check. + */ + /** + * JSON type identifier. Basic types are: + * o Object + * o Array + * o String + * o Other primitive: number, boolean (true/false) or null + */ + typedef enum + { + JSMN_UNDEFINED = 0, + JSMN_OBJECT = 1, + JSMN_ARRAY = 2, + JSMN_STRING = 3, + JSMN_PRIMITIVE = 4, + JSMN_KEY = 5 + } jsmntype_t; + + enum jsmnerr + { + /* Not enough tokens were provided */ + JSMN_ERROR_NOMEM = -1, + /* Invalid character inside JSON string */ + JSMN_ERROR_INVAL = -2, + /* The string is not a full JSON packet, more bytes expected */ + JSMN_ERROR_PART = -3 + }; + + /** + * JSON token description. + * @param type type (object, array, string etc.) + * @param start start position in JSON data string + * @param end end position in JSON data string + */ + typedef struct + { + jsmntype_t type; + int start; + int end; + int parent; + int childCount; + } jsmntok_t; + + /** + * JSON parser. Contains an array of token blocks available. Also stores + * the string being parsed now and current position in that string + */ + typedef struct + { + unsigned int pos; /* offset in the JSON string */ + unsigned int toknext; /* next token to allocate */ + int toksuper; /* superior token node, e.g parent object or array */ + } jsmn_parser; + + /** + * Create JSON parser over an array of tokens + */ + void jsmn_init ( jsmn_parser *parser ); + + /** + * Run JSON parser. It parses a JSON data string into and array of tokens, each describing + * a single JSON object. + */ + int jsmn_parse ( jsmn_parser *parser, const char *js, size_t len, jsmntok_t *tokens, unsigned int num_tokens ); + +#ifdef __cplusplus +} +#endif + +#endif /* __JSMN_H_ */ +