17 #ifndef UJSON_READER_H
18 #define UJSON_READER_H
32 #define UJSON_READER_INIT(buf, buf_len, rflags) { \
33 .max_depth = UJSON_RECURSION_MAX, \
34 .err_print = UJSON_ERR_PRINT, \
35 .err_print_priv = UJSON_ERR_PRINT_PRIV, \
68 void (*
err_print)(
void *err_print_priv,
const char *line);
83 #define UJSON_VAL_INIT(sbuf, sbuf_size) { \
85 .buf_size = sbuf_size, \
172 __attribute__((format(printf, 2, 3)));
197 __attribute__((format(printf, 2, 3)));
207 return !!
self->err[0];
262 #define UJSON_OBJ_FOREACH(self, res) \
263 for (ujson_obj_first(self, res); ujson_val_valid(res); ujson_obj_next(self, res))
273 size_t ujson_lookup(
const void *arr,
size_t memb_size,
size_t list_len,
305 static inline size_t ujson_obj_lookup(
const ujson_obj *obj,
const char *key)
311 #define UJSON_OBJ_ATTR(keyv, typev) \
312 {.key = keyv, .type = typev}
315 #define UJSON_OBJ_ATTR_IDX(key_idx, keyv, typev) \
316 [key_idx] = {.key = keyv, .type = typev}
381 #define UJSON_OBJ_FOREACH_FILTER(self, res, obj, ign) \
382 for (ujson_obj_first_filter(self, res, obj, ign); \
383 ujson_val_valid(res); \
384 ujson_obj_next_filter(self, res, obj, ign))
431 #define UJSON_ARR_FOREACH(self, res) \
432 for (ujson_arr_first(self, res); ujson_val_valid(res); ujson_arr_next(self, res))
463 .off =
self->sub_off,
464 .depth =
self->depth,
484 self->off = state.off;
485 self->sub_off = state.off;
486 self->depth = state.depth;
540 return self->off >=
self->len;
A JSON object attribute description i.e. key and type.
enum ujson_type type
A JSON object value type.
const char * key
A JSON object key name.
A JSON object description.
const ujson_obj_attr * attrs
A list of attributes.
size_t attr_cnt
A size of attrs array.
A JSON parser internal state.
enum ujson_reader_flags flags
void(* err_print)(void *err_print_priv, const char *line)
A parsed JSON key value pair.
double val_float
A floating point value.
int val_bool
A boolean value.
long long val_int
An integer value.
size_t idx
An index to attribute list.
const char * val_str
A string value.
enum ujson_type type
A value type.
Common JSON reader/writer definitions.
#define UJSON_ERR_MAX
Maximal error message length.
#define UJSON_ID_MAX
Maximal id string lenght including terminating null element.
ujson_type
A JSON data type.
void static int ujson_reader_err(ujson_reader *self)
Returns true if error was encountered.
int ujson_arr_first(ujson_reader *self, struct ujson_val *res)
Starts parsing of a JSON array.
static void ujson_reader_reset(ujson_reader *self)
Resets the parser to a start.
int ujson_obj_next_filter(ujson_reader *self, struct ujson_val *res, const struct ujson_obj *obj, const struct ujson_obj *ign)
Parses next value from a JSON object with attribute lists.
void ujson_err(ujson_reader *self, const char *fmt,...) __attribute__((format(printf
Fills the reader error.
static int ujson_val_valid(struct ujson_val *res)
Checks is result has valid type.
enum ujson_type ujson_reader_start(ujson_reader *self)
Returns if first element in JSON is object or array.
int ujson_arr_next(ujson_reader *self, struct ujson_val *res)
Parses next value from a JSON array.
struct ujson_reader_state ujson_reader_state
A JSON reader state.
enum ujson_type ujson_next_type(ujson_reader *self)
Returns the type of next element in buffer.
ujson_reader * ujson_reader_load(const char *path)
Loads a file into an ujson_reader buffer.
void void ujson_err_print(ujson_reader *self)
Prints error stored in the buffer.
int ujson_obj_next(ujson_reader *self, struct ujson_val *res)
Parses next value from a JSON object.
static void ujson_reader_state_load(ujson_reader *self, ujson_reader_state state)
Returns the parser to a saved state.
void ujson_reader_finish(ujson_reader *self)
Prints errors and warnings at the end of parsing.
int ujson_obj_first_filter(ujson_reader *self, struct ujson_val *res, const struct ujson_obj *obj, const struct ujson_obj *ign)
Starts parsing of a JSON object with attribute lists.
static int ujson_reader_consumed(ujson_reader *self)
Returns non-zero if whole buffer has been consumed.
size_t ujson_lookup(const void *arr, size_t memb_size, size_t list_len, const char *key)
Utility function for log(n) lookup in a sorted array.
void ujson_warn(ujson_reader *self, const char *fmt,...) __attribute__((format(printf
Prints a warning.
int ujson_obj_first(ujson_reader *self, struct ujson_val *res)
Starts parsing of a JSON object.
int ujson_arr_skip(ujson_reader *self)
Skips parsing of a JSON array.
struct ujson_obj ujson_obj
A JSON object description.
struct ujson_obj_attr ujson_obj_attr
A JSON object attribute description i.e. key and type.
static ujson_reader_state ujson_reader_state_save(ujson_reader *self)
Returns a parser state at the start of current object/array.
void ujson_val_free(ujson_val *self)
Frees a JSON value.
ujson_val * ujson_val_alloc(size_t buf_size)
Allocates a JSON value.
void ujson_reader_free(ujson_reader *self)
Frees an ujson_reader buffer.
ujson_reader_flags
Reader flags.
@ UJSON_READER_STRICT
If set warnings are treated as errors.
const struct ujson_obj * ujson_empty_obj
An empty object attribute list.
int ujson_obj_skip(ujson_reader *self)
Skips parsing of a JSON object.