htils 1
A small set of utilities for C programming.
Loading...
Searching...
No Matches
json.h
Go to the documentation of this file.
1#ifndef H2OTILS_JSON_H
2#define H2OTILS_JSON_H
3
4#include <h2o/memory.h>
5
6//
7// TODO: Document this.
8//
9
10#include <htils/basictypes.h>
11
12//
13//
14//
15
16#include <h2otils/string.h>
17#include <h2otils/stringmap.h>
18
19//
20//
21//
22
33
38
39typedef struct h2o_json_node {
42
43 union {
44 struct {
47
48 struct {
51
52 struct {
55
56 struct {
59
60 struct {
61 struct {
62 struct h2o_json_node **items; // Using darray.h
64 struct {
70
71 struct {
73 struct {
76 struct {
83
84//
85//
86//
87
88h2o_json_node_t *h2o_json_parse(h2o_mem_pool_t *pool,
89 const h2o_string *json_body);
90h2o_json_node_t *h2o_json_parse_from_slice(h2o_mem_pool_t *pool,
91 const h2o_string_slice slice);
92
94 h2o_string_slice slice);
95
96//
97//
98//
99
100h2o_json_node_t *h2o_json_get_object(h2o_mem_pool_t *pool, h2o_json_node_t *obj,
101 h2o_string *key);
102h2o_json_node_t *h2o_json_get_object_slice(h2o_mem_pool_t *pool,
103 h2o_json_node_t *obj,
104 h2o_string_slice slice);
105h2o_json_node_t *h2o_json_get_array(h2o_mem_pool_t *pool, h2o_json_node_t *arr,
106 u64 idx);
107
108h2o_json_node_t *h2o_json_path_get(h2o_mem_pool_t *pool,
109 const h2o_string *json_string,
110 const h2o_string *path);
111h2o_json_node_t *h2o_json_path_get_slice(h2o_mem_pool_t *pool,
112 const h2o_string_slice json_slice,
113 const h2o_string_slice path);
114
115//
116//
117//
118
127
128//
129//
130//
131
137
138//
139//
140//
141
148
149h2o_string *h2o_json_write(h2o_mem_pool_t *pool, h2o_json_node_t *node,
150 h2o_json_write_options_t options, u64 indent);
151
152h2o_string *h2o_json_write_pretty(h2o_mem_pool_t *pool, h2o_json_node_t *node,
153 u64 indent);
154
155//
156//
157//
158
159h2o_json_node_t *h2o_json_new_null(h2o_mem_pool_t *pool);
160h2o_json_node_t *h2o_json_new_bool(h2o_mem_pool_t *pool, b32 val);
161h2o_json_node_t *h2o_json_new_integer(h2o_mem_pool_t *pool, i64 val);
162h2o_json_node_t *h2o_json_new_float(h2o_mem_pool_t *pool, f64 val);
163h2o_json_node_t *h2o_json_new_string(h2o_mem_pool_t *pool, h2o_string *val);
164h2o_json_node_t *h2o_json_new_string_slice(h2o_mem_pool_t *pool,
165 h2o_string_slice val);
166h2o_json_node_t *h2o_json_new_array(h2o_mem_pool_t *pool);
167h2o_json_node_t *h2o_json_new_object(h2o_mem_pool_t *pool);
168
169//
170//
171//
172
173b32 h2o_json_array_push(h2o_mem_pool_t *pool, h2o_json_node_t *arr,
174 h2o_json_node_t *val);
175
176b32 h2o_json_array_set(h2o_mem_pool_t *pool, h2o_json_node_t *arr,
177 h2o_json_node_t *val, u64 idx);
178b32 h2o_json_obj_set(h2o_mem_pool_t *pool, h2o_json_node_t *obj,
179 h2o_string *key, h2o_json_node_t *val);
180
181//
182//
183//
184
190
191h2o_json_error_t *h2o_json_get_error(h2o_mem_pool_t *pool);
192void h2o_json_clear_error(void);
193
194#endif // !H2OTILS_JSON_H
uint64_t u64
Definition basictypes.h:18
u32 b32
Definition basictypes.h:39
int64_t i64
Definition basictypes.h:30
double f64
Definition basictypes.h:36
char cstr
Definition basictypes.h:55
h2o_iovec_t h2o_string
Definition string.h:22
h2o_string h2o_string_slice
Definition string.h:25
h2o_string * h2o_json_write_pretty(h2o_mem_pool_t *pool, h2o_json_node_t *node, u64 indent)
Definition json.c:1592
h2o_json_node_t * h2o_json_parse_from_lazy_slice(h2o_mem_pool_t *pool, h2o_string_slice slice)
Definition json.c:1277
h2o_json_node_t * h2o_json_parse(h2o_mem_pool_t *pool, const h2o_string *json_body)
Definition json.c:1004
enum h2o_json_write_options h2o_json_write_options_t
enum h2o_json_parse_method h2o_json_parse_method_t
h2o_json_node_t * h2o_json_new_object(h2o_mem_pool_t *pool)
Definition json.c:1508
b32 h2o_json_get_bool(h2o_json_node_t *node)
Definition json.c:1361
void h2o_json_clear_error(void)
Definition json.c:998
b32 h2o_json_is_object(h2o_json_node_t *node)
Definition json.c:1353
b32 h2o_json_is_null(h2o_json_node_t *node)
Definition json.c:1329
b32 h2o_json_array_push(h2o_mem_pool_t *pool, h2o_json_node_t *arr, h2o_json_node_t *val)
Definition json.c:1526
b32 h2o_json_is_integer(h2o_json_node_t *node)
Definition json.c:1337
h2o_json_type
Definition json.h:23
@ H2O_JSON_INVALID
Definition json.h:31
@ H2O_JSON_FLOAT
Definition json.h:26
@ H2O_JSON_BOOL
Definition json.h:25
@ H2O_JSON_NULL
Definition json.h:24
@ H2O_JSON_ARRAY
Definition json.h:29
@ H2O_JSON_STRING
Definition json.h:28
@ H2O_JSON_OBJECT
Definition json.h:30
@ H2O_JSON_INTEGER
Definition json.h:27
h2o_string * h2o_json_write(h2o_mem_pool_t *pool, h2o_json_node_t *node, h2o_json_write_options_t options, u64 indent)
Definition json.c:1568
h2o_json_write_options
Definition json.h:142
@ H2O_JSON_WRITE_COMPACT
Definition json.h:146
@ H2O_JSON_WRITE_PRETTY
Definition json.h:144
@ H2O_JSON_WRITE_DEFAULT
Definition json.h:143
@ H2O_JSON_WRITE_SORT_KEYS
Definition json.h:145
struct h2o_json_node h2o_json_node_t
b32 h2o_json_array_set(h2o_mem_pool_t *pool, h2o_json_node_t *arr, h2o_json_node_t *val, u64 idx)
Definition json.c:1538
f64 h2o_json_get_float(h2o_json_node_t *node)
Definition json.c:1373
h2o_json_node_t * h2o_json_new_string_slice(h2o_mem_pool_t *pool, h2o_string_slice val)
Definition json.c:1474
b32 h2o_json_is_bool(h2o_json_node_t *node)
Definition json.c:1333
h2o_json_node_t * h2o_json_parse_from_slice(h2o_mem_pool_t *pool, const h2o_string_slice slice)
Definition json.c:1010
u64 h2o_json_get_array_count(h2o_json_node_t *node)
Definition json.c:1385
struct h2o_json_error h2o_json_error_t
h2o_json_error_t * h2o_json_get_error(h2o_mem_pool_t *pool)
Definition json.c:989
h2o_json_node_t * h2o_json_path_get_slice(h2o_mem_pool_t *pool, const h2o_string_slice json_slice, const h2o_string_slice path)
Definition json.c:1175
i64 h2o_json_get_integer(h2o_json_node_t *node)
Definition json.c:1367
h2o_json_node_t * h2o_json_new_array(h2o_mem_pool_t *pool)
Definition json.c:1494
h2o_json_node_t * h2o_json_new_null(h2o_mem_pool_t *pool)
Definition json.c:1399
h2o_string_slice h2o_json_get_string(h2o_json_node_t *node)
Definition json.c:1379
b32 h2o_json_is_float(h2o_json_node_t *node)
Definition json.c:1341
enum h2o_json_type h2o_json_type_t
h2o_json_node_t * h2o_json_new_bool(h2o_mem_pool_t *pool, b32 val)
Definition json.c:1412
h2o_json_node_t * h2o_json_get_object(h2o_mem_pool_t *pool, h2o_json_node_t *obj, h2o_string *key)
Definition json.c:1135
b32 h2o_json_is_array(h2o_json_node_t *node)
Definition json.c:1349
b32 h2o_json_obj_set(h2o_mem_pool_t *pool, h2o_json_node_t *obj, h2o_string *key, h2o_json_node_t *val)
Definition json.c:1553
b32 h2o_json_is_valid(h2o_json_node_t *node)
Definition json.c:1325
h2o_json_node_t * h2o_json_get_array(h2o_mem_pool_t *pool, h2o_json_node_t *arr, u64 idx)
Definition json.c:1142
h2o_json_node_t * h2o_json_new_float(h2o_mem_pool_t *pool, f64 val)
Definition json.c:1447
h2o_json_parse_method
Definition json.h:34
@ H2O_JSON_PARSE_LAZY
Definition json.h:36
@ H2O_JSON_PARSE_FULL
Definition json.h:35
h2o_json_node_t * h2o_json_new_integer(h2o_mem_pool_t *pool, i64 val)
Definition json.c:1426
h2o_json_node_t * h2o_json_path_get(h2o_mem_pool_t *pool, const h2o_string *json_string, const h2o_string *path)
Definition json.c:1166
h2o_json_node_t * h2o_json_get_object_slice(h2o_mem_pool_t *pool, h2o_json_node_t *obj, h2o_string_slice slice)
Definition json.c:1055
h2o_json_node_t * h2o_json_new_string(h2o_mem_pool_t *pool, h2o_string *val)
Definition json.c:1468
b32 h2o_json_is_string(h2o_json_node_t *node)
Definition json.c:1345
Definition json.h:185
cstr * msg
Definition json.h:187
u64 pos
Definition json.h:188
b32 has_error
Definition json.h:186
Definition json.h:39
struct h2o_json_node::@0::@5::@7 full
h2o_string_slice slice
Definition json.h:41
h2o_json_type_t type
Definition json.h:40
h2o_stringmap_t * nodes
Definition json.h:74
struct h2o_json_node::@0::@2 int_data
struct h2o_json_node ** items
Definition json.h:62
b32 bool_val
Definition json.h:45
struct h2o_json_node::@0::@6 object_data
struct h2o_json_node::@0::@3 float_data
b32 is_lazy
Definition json.h:68
i64 int_val
Definition json.h:49
h2o_stringmap_t * lazy_poses
Definition json.h:77
u64 * poses
Definition json.h:65
union h2o_json_node::@0 data
struct h2o_json_node::@0::@5::@8 lazy
struct h2o_json_node::@0::@1 bool_data
h2o_stringmap_t * keys
Definition json.h:72
h2o_string_slice str_val
Definition json.h:57
f64 float_val
Definition json.h:53
struct h2o_json_node::@0::@4 str_data
u64 count
Definition json.h:66
struct h2o_json_node::@0::@5 array_data
A stringmap.
Definition stringmap.h:68