-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathjson.h
94 lines (78 loc) · 3.03 KB
/
json.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#pragma once
#include <stddef.h>
enum JsonType
{
jsonStringT,
jsonNumberT,
jsonObjectT,
jsonArrayT,
jsonTrueT,
jsonFalseT,
jsonNullT,
};
struct JsonVal
{
enum JsonType type;
union
{
char *string;
long double number;
struct {
char **keys;
struct JsonVal *values;
int len;
} object;
struct {
struct JsonVal *values;
int len;
} array;
} u;
};
struct JsonVal jsonParseString(const char *str, char *errorBuf, int errorBufSize);
/*creates empty (top-level) object*/
struct JsonVal jsonCreateObject();
/*check type functions*/
int JsonVal_isString(const struct JsonVal *val);
int JsonVal_isNumber(const struct JsonVal *val);
int JsonVal_isObject(const struct JsonVal *val);
int JsonVal_isArray(const struct JsonVal *val);
int JsonVal_isTrue(const struct JsonVal *val);
int JsonVal_isFalse(const struct JsonVal *val);
int JsonVal_isNull(const struct JsonVal *val);
/*add subvalues to existing values. return pointers to the newly created values.*/
struct JsonVal *JsonVal_objectAddString(struct JsonVal *val, const char *key, const char *value);
struct JsonVal *JsonVal_objectAddNumber(struct JsonVal *val, const char *key, long double number);
struct JsonVal *JsonVal_objectAddObject(struct JsonVal *val, const char *key);
struct JsonVal *JsonVal_objectAddArray(struct JsonVal *val, const char *key);
struct JsonVal *JsonVal_objectAddTrue(struct JsonVal *val, const char *key);
struct JsonVal *JsonVal_objectAddFalse(struct JsonVal *val, const char *key);
struct JsonVal *JsonVal_objectAddNull(struct JsonVal *val, const char *key);
struct JsonVal *JsonVal_arrayAddString(struct JsonVal *val, const char *value);
struct JsonVal *JsonVal_arrayAddNumber(struct JsonVal *val, long double number);
struct JsonVal *JsonVal_arrayAddObject(struct JsonVal *val);
struct JsonVal *JsonVal_arrayAddArray(struct JsonVal *val);
struct JsonVal *JsonVal_arrayAddTrue(struct JsonVal *val);
struct JsonVal *JsonVal_arrayAddFalse(struct JsonVal *val);
struct JsonVal *JsonVal_arrayAddNull(struct JsonVal *val);
/*access functions*/
int JsonVal_arrayLen(struct JsonVal *val);
struct JsonVal *JsonVal_arrayAt(struct JsonVal* val, int index);
struct JsonVal *JsonVal_getObjectValueByKey(const struct JsonVal *val, const char *key);
void JsonVal_forEachArrayElement(
const struct JsonVal *val,
void *ctx,
void (*action)(void *, const struct JsonVal *));
void JsonVal_forEachObjectElement(
const struct JsonVal *val,
void *ctx,
void (*action)(void *, const char *key, const struct JsonVal *));
/*write functions*/
int JsonVal_write(
const struct JsonVal *val,
/*User context. Will be passed to the writeFunc callback.*/
void *ctx,
/*user supplied write callback function.*/
int (*writeFunc)(void *ctx, void *buf, int len));
/*returns total bytes required*/
int JsonVal_writeString(const struct JsonVal *val, char *buf, int len);
void JsonVal_destroy(struct JsonVal *val);