htils 1
A small set of utilities for C programming.
Loading...
Searching...
No Matches
json.c File Reference
#include <ctype.h>
#include <math.h>
#include <threads.h>
#include <h2o/memory.h>
#include <htils/assert.h>
#include <htils/basictypes.h>
#include <h2otils/darray.h>
#include <h2otils/json.h>
#include <h2otils/string.h>
#include <h2otils/stringmap.h>

Macros

#define max(a, b)   ((a) > (b) ? (a) : (b))
 

Functions

static b32 is_whitespace (char c)
 
static void skip_whitespace (h2o_string_slice slice, u64 *pos)
 
static h2o_json_type_t determine_value_type (h2o_string_slice slice, u64 *pos, u64 *end_pos)
 
static void skip_json_value (h2o_string_slice slice, u64 *pos)
 
static void set_error (h2o_mem_pool_t *pool, cstr *msg, u64 pos)
 
static b32 parse_number (h2o_mem_pool_t *pool, h2o_string_slice slice, u64 num_start_pos, u64 num_len, b32 is_float, h2o_json_node_t *node, u64 pos)
 
static h2o_json_node_tparse_object_full (h2o_mem_pool_t *pool, h2o_string_slice slice, u64 *pos)
 Full.
 
static h2o_json_node_tparse_array_full (h2o_mem_pool_t *pool, h2o_string_slice slice, u64 *pos)
 
static h2o_json_node_tparse_primitive_full (h2o_mem_pool_t *pool, h2o_string_slice slice, u64 *pos)
 
static h2o_json_node_tparse_value_full (h2o_mem_pool_t *pool, h2o_string_slice slice, u64 *pos)
 
static h2o_json_node_tparse_array_lazy (h2o_mem_pool_t *pool, h2o_string_slice slice, u64 *pos)
 
static h2o_json_node_tparse_object_lazy (h2o_mem_pool_t *pool, h2o_string_slice slice, u64 *pos)
 
static h2o_json_node_tparse_value_lazy (h2o_mem_pool_t *pool, h2o_string_slice slice, u64 *pos)
 
static void escape_json_string (h2o_mem_pool_t *pool, h2o_string *out, h2o_string_slice in)
 
static void write_json_value (h2o_mem_pool_t *pool, h2o_string *out, h2o_json_node_t *node, u64 indent, b32 pretty)
 
static u64 estimate_json_size (h2o_json_node_t *node)
 
h2o_json_error_th2o_json_get_error (h2o_mem_pool_t *pool)
 
void h2o_json_clear_error (void)
 
h2o_json_node_th2o_json_parse (h2o_mem_pool_t *pool, const h2o_string *json_body)
 
h2o_json_node_th2o_json_parse_from_slice (h2o_mem_pool_t *pool, h2o_string_slice slice)
 
h2o_json_node_th2o_json_get_object_slice (h2o_mem_pool_t *pool, h2o_json_node_t *obj, h2o_string_slice key)
 
h2o_json_node_th2o_json_get_object (h2o_mem_pool_t *pool, h2o_json_node_t *obj, h2o_string *key)
 
h2o_json_node_th2o_json_get_array (h2o_mem_pool_t *pool, h2o_json_node_t *arr, u64 idx)
 
h2o_json_node_th2o_json_path_get (h2o_mem_pool_t *pool, const h2o_string *json_string, const h2o_string *path)
 
h2o_json_node_th2o_json_path_get_slice (h2o_mem_pool_t *pool, const h2o_string_slice json_slice, const h2o_string_slice path_slice)
 
h2o_json_node_th2o_json_parse_from_lazy_slice (h2o_mem_pool_t *pool, h2o_string_slice slice)
 
b32 h2o_json_is_valid (h2o_json_node_t *node)
 
b32 h2o_json_is_null (h2o_json_node_t *node)
 
b32 h2o_json_is_bool (h2o_json_node_t *node)
 
b32 h2o_json_is_integer (h2o_json_node_t *node)
 
b32 h2o_json_is_float (h2o_json_node_t *node)
 
b32 h2o_json_is_string (h2o_json_node_t *node)
 
b32 h2o_json_is_array (h2o_json_node_t *node)
 
b32 h2o_json_is_object (h2o_json_node_t *node)
 
b32 h2o_json_get_bool (h2o_json_node_t *node)
 
i64 h2o_json_get_integer (h2o_json_node_t *node)
 
f64 h2o_json_get_float (h2o_json_node_t *node)
 
h2o_string_slice h2o_json_get_string (h2o_json_node_t *node)
 
u64 h2o_json_get_array_count (h2o_json_node_t *node)
 
h2o_json_node_th2o_json_new_null (h2o_mem_pool_t *pool)
 
h2o_json_node_th2o_json_new_bool (h2o_mem_pool_t *pool, b32 val)
 
h2o_json_node_th2o_json_new_integer (h2o_mem_pool_t *pool, i64 val)
 
h2o_json_node_th2o_json_new_float (h2o_mem_pool_t *pool, f64 val)
 
h2o_json_node_th2o_json_new_string (h2o_mem_pool_t *pool, h2o_string *val)
 
h2o_json_node_th2o_json_new_string_slice (h2o_mem_pool_t *pool, h2o_string_slice val)
 
h2o_json_node_th2o_json_new_array (h2o_mem_pool_t *pool)
 
h2o_json_node_th2o_json_new_object (h2o_mem_pool_t *pool)
 
b32 h2o_json_array_push (h2o_mem_pool_t *pool, h2o_json_node_t *arr, h2o_json_node_t *val)
 
b32 h2o_json_array_set (h2o_mem_pool_t *pool, h2o_json_node_t *arr, h2o_json_node_t *val, u64 idx)
 
b32 h2o_json_obj_set (h2o_mem_pool_t *pool, h2o_json_node_t *obj, h2o_string *key, h2o_json_node_t *val)
 
h2o_stringh2o_json_write (h2o_mem_pool_t *pool, h2o_json_node_t *node, h2o_json_write_options_t options, u64 indent)
 
h2o_stringh2o_json_write_pretty (h2o_mem_pool_t *pool, h2o_json_node_t *node, u64 indent)
 

Variables

static thread_local h2o_json_error_t global_json_error = {0}
 

Macro Definition Documentation

◆ max

#define max (   a,
 
)    ((a) > (b) ? (a) : (b))

Function Documentation

◆ determine_value_type()

static h2o_json_type_t determine_value_type ( h2o_string_slice  slice,
u64 pos,
u64 end_pos 
)
static

◆ escape_json_string()

static void escape_json_string ( h2o_mem_pool_t *  pool,
h2o_string out,
h2o_string_slice  in 
)
static

◆ estimate_json_size()

static u64 estimate_json_size ( h2o_json_node_t node)
static

◆ h2o_json_array_push()

b32 h2o_json_array_push ( h2o_mem_pool_t *  pool,
h2o_json_node_t arr,
h2o_json_node_t val 
)

◆ h2o_json_array_set()

b32 h2o_json_array_set ( h2o_mem_pool_t *  pool,
h2o_json_node_t arr,
h2o_json_node_t val,
u64  idx 
)

◆ h2o_json_clear_error()

void h2o_json_clear_error ( void  )

◆ h2o_json_get_array()

h2o_json_node_t * h2o_json_get_array ( h2o_mem_pool_t *  pool,
h2o_json_node_t arr,
u64  idx 
)

◆ h2o_json_get_array_count()

u64 h2o_json_get_array_count ( h2o_json_node_t node)

◆ h2o_json_get_bool()

b32 h2o_json_get_bool ( h2o_json_node_t node)

◆ h2o_json_get_error()

h2o_json_error_t * h2o_json_get_error ( h2o_mem_pool_t *  pool)

◆ h2o_json_get_float()

f64 h2o_json_get_float ( h2o_json_node_t node)

◆ h2o_json_get_integer()

i64 h2o_json_get_integer ( h2o_json_node_t node)

◆ h2o_json_get_object()

h2o_json_node_t * h2o_json_get_object ( h2o_mem_pool_t *  pool,
h2o_json_node_t obj,
h2o_string key 
)

◆ h2o_json_get_object_slice()

h2o_json_node_t * h2o_json_get_object_slice ( h2o_mem_pool_t *  pool,
h2o_json_node_t obj,
h2o_string_slice  key 
)

◆ h2o_json_get_string()

h2o_string_slice h2o_json_get_string ( h2o_json_node_t node)

◆ h2o_json_is_array()

b32 h2o_json_is_array ( h2o_json_node_t node)

◆ h2o_json_is_bool()

b32 h2o_json_is_bool ( h2o_json_node_t node)

◆ h2o_json_is_float()

b32 h2o_json_is_float ( h2o_json_node_t node)

◆ h2o_json_is_integer()

b32 h2o_json_is_integer ( h2o_json_node_t node)

◆ h2o_json_is_null()

b32 h2o_json_is_null ( h2o_json_node_t node)

◆ h2o_json_is_object()

b32 h2o_json_is_object ( h2o_json_node_t node)

◆ h2o_json_is_string()

b32 h2o_json_is_string ( h2o_json_node_t node)

◆ h2o_json_is_valid()

b32 h2o_json_is_valid ( h2o_json_node_t node)

◆ h2o_json_new_array()

h2o_json_node_t * h2o_json_new_array ( h2o_mem_pool_t *  pool)

◆ h2o_json_new_bool()

h2o_json_node_t * h2o_json_new_bool ( h2o_mem_pool_t *  pool,
b32  val 
)

◆ h2o_json_new_float()

h2o_json_node_t * h2o_json_new_float ( h2o_mem_pool_t *  pool,
f64  val 
)

◆ h2o_json_new_integer()

h2o_json_node_t * h2o_json_new_integer ( h2o_mem_pool_t *  pool,
i64  val 
)

◆ h2o_json_new_null()

h2o_json_node_t * h2o_json_new_null ( h2o_mem_pool_t *  pool)

◆ h2o_json_new_object()

h2o_json_node_t * h2o_json_new_object ( h2o_mem_pool_t *  pool)

◆ h2o_json_new_string()

h2o_json_node_t * h2o_json_new_string ( h2o_mem_pool_t *  pool,
h2o_string val 
)

◆ h2o_json_new_string_slice()

h2o_json_node_t * h2o_json_new_string_slice ( h2o_mem_pool_t *  pool,
h2o_string_slice  val 
)

◆ h2o_json_obj_set()

b32 h2o_json_obj_set ( h2o_mem_pool_t *  pool,
h2o_json_node_t obj,
h2o_string key,
h2o_json_node_t val 
)

◆ h2o_json_parse()

h2o_json_node_t * h2o_json_parse ( h2o_mem_pool_t *  pool,
const h2o_string json_body 
)

◆ h2o_json_parse_from_lazy_slice()

h2o_json_node_t * h2o_json_parse_from_lazy_slice ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice 
)

◆ h2o_json_parse_from_slice()

h2o_json_node_t * h2o_json_parse_from_slice ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice 
)

◆ h2o_json_path_get()

h2o_json_node_t * h2o_json_path_get ( h2o_mem_pool_t *  pool,
const h2o_string json_string,
const h2o_string path 
)

◆ h2o_json_path_get_slice()

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_slice 
)

◆ h2o_json_write()

h2o_string * h2o_json_write ( h2o_mem_pool_t *  pool,
h2o_json_node_t node,
h2o_json_write_options_t  options,
u64  indent 
)

◆ h2o_json_write_pretty()

h2o_string * h2o_json_write_pretty ( h2o_mem_pool_t *  pool,
h2o_json_node_t node,
u64  indent 
)

◆ is_whitespace()

static b32 is_whitespace ( char  c)
inlinestatic

◆ parse_array_full()

static h2o_json_node_t * parse_array_full ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice,
u64 pos 
)
static

◆ parse_array_lazy()

static h2o_json_node_t * parse_array_lazy ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice,
u64 pos 
)
static

◆ parse_number()

static b32 parse_number ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice,
u64  num_start_pos,
u64  num_len,
b32  is_float,
h2o_json_node_t node,
u64  pos 
)
static

◆ parse_object_full()

static h2o_json_node_t * parse_object_full ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice,
u64 pos 
)
static

Full.

◆ parse_object_lazy()

static h2o_json_node_t * parse_object_lazy ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice,
u64 pos 
)
static

◆ parse_primitive_full()

static h2o_json_node_t * parse_primitive_full ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice,
u64 pos 
)
static

◆ parse_value_full()

static h2o_json_node_t * parse_value_full ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice,
u64 pos 
)
static

◆ parse_value_lazy()

static h2o_json_node_t * parse_value_lazy ( h2o_mem_pool_t *  pool,
h2o_string_slice  slice,
u64 pos 
)
static

◆ set_error()

static void set_error ( h2o_mem_pool_t *  pool,
cstr msg,
u64  pos 
)
static

◆ skip_json_value()

static void skip_json_value ( h2o_string_slice  slice,
u64 pos 
)
static

◆ skip_whitespace()

static void skip_whitespace ( h2o_string_slice  slice,
u64 pos 
)
static

◆ write_json_value()

static void write_json_value ( h2o_mem_pool_t *  pool,
h2o_string out,
h2o_json_node_t node,
u64  indent,
b32  pretty 
)
static

Variable Documentation

◆ global_json_error

thread_local h2o_json_error_t global_json_error = {0}
static