Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gteissier
GitHub Repository: gteissier/erl-matter
Path: blob/master/jsmn.h
271 views
1
#ifndef __JSMN_H_
2
#define __JSMN_H_
3
4
#include <stddef.h>
5
6
#ifdef __cplusplus
7
extern "C" {
8
#endif
9
10
/**
11
* JSON type identifier. Basic types are:
12
* o Object
13
* o Array
14
* o String
15
* o Other primitive: number, boolean (true/false) or null
16
*/
17
typedef enum {
18
JSMN_UNDEFINED = 0,
19
JSMN_OBJECT = 1,
20
JSMN_ARRAY = 2,
21
JSMN_STRING = 3,
22
JSMN_PRIMITIVE = 4
23
} jsmntype_t;
24
25
enum jsmnerr {
26
/* Not enough tokens were provided */
27
JSMN_ERROR_NOMEM = -1,
28
/* Invalid character inside JSON string */
29
JSMN_ERROR_INVAL = -2,
30
/* The string is not a full JSON packet, more bytes expected */
31
JSMN_ERROR_PART = -3
32
};
33
34
/**
35
* JSON token description.
36
* type type (object, array, string etc.)
37
* start start position in JSON data string
38
* end end position in JSON data string
39
*/
40
typedef struct {
41
jsmntype_t type;
42
int start;
43
int end;
44
int size;
45
#ifdef JSMN_PARENT_LINKS
46
int parent;
47
#endif
48
} jsmntok_t;
49
50
/**
51
* JSON parser. Contains an array of token blocks available. Also stores
52
* the string being parsed now and current position in that string
53
*/
54
typedef struct {
55
unsigned int pos; /* offset in the JSON string */
56
unsigned int toknext; /* next token to allocate */
57
int toksuper; /* superior token node, e.g parent object or array */
58
} jsmn_parser;
59
60
/**
61
* Create JSON parser over an array of tokens
62
*/
63
void jsmn_init(jsmn_parser *parser);
64
65
/**
66
* Run JSON parser. It parses a JSON data string into and array of tokens, each describing
67
* a single JSON object.
68
*/
69
int jsmn_parse(jsmn_parser *parser, const char *js, size_t len,
70
jsmntok_t *tokens, unsigned int num_tokens);
71
72
#ifdef __cplusplus
73
}
74
#endif
75
76
#endif /* __JSMN_H_ */
77
78