2 * Copyright 2022 Olaf Wintermann
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20 * DEALINGS IN THE SOFTWARE.
33 typedef struct JSONParser JSONParser;
34 typedef struct JSONToken JSONToken;
36 typedef struct JSONValue JSONValue;
38 typedef enum JSONTokenType JSONTokenType;
39 typedef enum JSONValueType JSONValueType;
40 typedef enum JSONLiteralType JSONLiteralType;
41 typedef enum JSONReaderType JSONReaderType;
43 typedef struct JSONArray JSONArray;
44 typedef struct JSONObject JSONObject;
45 typedef struct JSONString JSONString;
46 typedef struct JSONInteger JSONInteger;
47 typedef struct JSONNumber JSONNumber;
48 typedef struct JSONLiteral JSONLiteral;
50 typedef struct JSONObjValue JSONObjValue;
52 typedef struct JSONReadValueStack JSONReadValueStack;
57 JSON_TOKEN_BEGIN_ARRAY,
58 JSON_TOKEN_BEGIN_OBJECT,
60 JSON_TOKEN_END_OBJECT,
61 JSON_TOKEN_NAME_SEPARATOR,
62 JSON_TOKEN_VALUE_SEPARATOR,
79 enum JSONLiteralType {
86 JSON_READER_OBJECT_BEGIN,
87 JSON_READER_OBJECT_END,
88 JSON_READER_ARRAY_BEGIN,
89 JSON_READER_ARRAY_END,
97 JSONTokenType tokentype;
108 JSONToken uncompleted;
109 int tokenizer_escape;
115 JSONToken reader_token;
116 JSONReaderType reader_type;
119 size_t value_name_len;
121 size_t value_str_len;
125 JSONValue **readvalue_stack;
128 JSONValue *read_value;
129 int readvalue_initialized;
131 int reader_array_alloc;
143 JSONObjValue *values;
148 struct JSONObjValue {
167 JSONLiteralType literal;
184 JSONParser* json_parser_new(void);
186 void json_parser_fill(JSONParser *p, const char *buf, size_t size);
188 JSONToken json_parser_next_token(JSONParser *p);
190 int json_read(JSONParser *p);
192 JSONReaderType json_reader_type(JSONParser *p);
193 const char* json_reader_name(JSONParser *p, size_t *opt_len);
194 const char* json_reader_string(JSONParser *p, size_t *opt_len);
195 int64_t json_reader_int(JSONParser *p);
196 double json_reader_double(JSONParser *p);
197 int json_reader_isnull(JSONParser *p);
198 JSONLiteralType json_reader_literal(JSONParser *p);
199 int json_reader_bool(JSONParser *p);
201 int json_read_value(JSONParser *p, JSONValue **value);
203 JSONValue* json_obj_get(JSONObject *obj, const char *name);
205 JSONValue* json_array_get(JSONArray *array, size_t i);
207 void json_value_free(JSONValue *value);