jsmn.h (1631B)
1/* SPDX-License-Identifier: MIT */ 2#ifndef __JSMN_H_ 3#define __JSMN_H_ 4 5/* 6 * JSON type identifier. Basic types are: 7 * o Object 8 * o Array 9 * o String 10 * o Other primitive: number, boolean (true/false) or null 11 */ 12typedef enum { 13 JSMN_PRIMITIVE = 0, 14 JSMN_OBJECT = 1, 15 JSMN_ARRAY = 2, 16 JSMN_STRING = 3 17} jsmntype_t; 18 19typedef enum { 20 /* Not enough tokens were provided */ 21 JSMN_ERROR_NOMEM = -1, 22 /* Invalid character inside JSON string */ 23 JSMN_ERROR_INVAL = -2, 24 /* The string is not a full JSON packet, more bytes expected */ 25 JSMN_ERROR_PART = -3, 26 /* Everything was fine */ 27 JSMN_SUCCESS = 0 28} jsmnerr_t; 29 30/* 31 * JSON token description. 32 * @param type type (object, array, string etc.) 33 * @param start start position in JSON data string 34 * @param end end position in JSON data string 35 */ 36typedef struct { 37 jsmntype_t type; 38 int start; 39 int end; 40 int size; 41} jsmntok_t; 42 43/* 44 * JSON parser. Contains an array of token blocks available. Also stores 45 * the string being parsed now and current position in that string 46 */ 47typedef struct { 48 unsigned int pos; /* offset in the JSON string */ 49 int toknext; /* next token to allocate */ 50 int toksuper; /* superior token node, e.g parent object or array */ 51} jsmn_parser; 52 53/* 54 * Create JSON parser over an array of tokens 55 */ 56void jsmn_init(jsmn_parser *parser); 57 58/* 59 * Run JSON parser. It parses a JSON data string into and array of tokens, 60 * each describing a single JSON object. 61 */ 62jsmnerr_t jsmn_parse(jsmn_parser *parser, const char *js, 63 size_t len, 64 jsmntok_t *tokens, unsigned int num_tokens); 65 66const char *jsmn_strerror(jsmnerr_t err); 67 68#endif /* __JSMN_H_ */