-
Notifications
You must be signed in to change notification settings - Fork 0
/
json.h
111 lines (97 loc) · 2.41 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* Copyright (C) 2023 James W M Barford-Evans
* <jamesbarfordevans at gmail dot com>
* All Rights Reserved
*
* This code is released under the BSD 2 clause license.
* See the COPYING.easy-json file for more information. */
#ifndef JSON_H
#define JSON_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#define JSON_MAX_EXPONENT (511)
#define JSON_SENTINAL ((void *)(long)0x44)
#define JSON_NO_FLAGS (0)
/* Do not parse numbers, treat them as strings */
#define JSON_STRNUM_FLAG (1)
typedef enum JSON_DATA_TYPE {
JSON_STRING,
JSON_FLOAT,
JSON_INT,
JSON_STRNUM,
JSON_ARRAY,
JSON_OBJECT,
JSON_BOOL,
JSON_NULL,
} JSON_DATA_TYPE;
typedef struct jsonState {
int error;
char ch;
size_t offset;
} jsonState;
typedef struct json json;
typedef struct json {
jsonState *state;
json *next;
char *key;
JSON_DATA_TYPE type;
union {
json *array;
json *object;
char *str;
int boolean;
char *strnum;
double floating;
ssize_t integer;
};
} json;
typedef enum JSON_ERRNO {
JSON_OK,
JSON_INVALID_UTF16,
JSON_INVALID_UTF16_SURROGATE,
JSON_INVALID_HEX,
JSON_INVALID_STRING_NOT_TERMINATED,
JSON_INVALID_NUMBER,
JSON_INVALID_DECIMAL,
JSON_INVALID_SIGN,
JSON_INVALID_JSON_TYPE_CHAR,
JSON_INVALID_BOOL,
JSON_INVALID_TYPE,
JSON_CANNOT_ADVANCE,
JSON_CANNOT_START_PARSE,
JSON_INVALID_KEY_TERMINATOR_CHARACTER,
JSON_INVALID_KEY_VALUE_SEPARATOR,
JSON_INVALID_ARRAY_CHARACTER,
JSON_INVALID_ESCAPE_CHARACTER,
JSON_EOF,
} JSON_ERRNO;
json *jsonGetObject(json *J);
json *jsonGetArray(json *J);
void *jsonGetNull(json *J);
int jsonGetBool(json *J);
char *jsonGetString(json *J);
ssize_t jsonGetInt(json *J);
double jsonGetFloat(json *J);
int jsonIsObject(json *j);
int jsonIsArray(json *j);
int jsonIsNull(json *j);
int jsonIsBool(json *j);
int jsonIsString(json *j);
int jsonIsInt(json *j);
int jsonIsFloat(json *j);
json *jsonParse(char *raw_json);
json *jsonParseWithFlags(char *raw_json, int flags);
json *jsonParseWithLen(char *raw_json, size_t buflen);
json *jsonParseWithLenAndFlags(char *raw_json, size_t buflen, int flags);
void jsonRelease(json *J);
int jsonGetError(json *j);
char *jsonGetStrerror(json *J);
void jsonPrintError(json *J);
char *jsonToString(json *j, size_t *len);
int jsonOk(json *j);
void jsonPrint(json *J);
#ifdef __cplusplus
}
#endif
#endif