yyjson 0.9.0
A high performance C JSON library.
yyjson.h File Reference
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <limits.h>
#include <string.h>
#include <float.h>

Data Structures

struct  yyjson_alc
 
struct  yyjson_read_err
 
struct  yyjson_write_err
 
struct  yyjson_arr_iter
 
struct  yyjson_obj_iter
 
struct  yyjson_mut_arr_iter
 
struct  yyjson_mut_obj_iter
 
struct  yyjson_ptr_err
 
struct  yyjson_ptr_ctx
 
struct  yyjson_patch_err
 
union  yyjson_val_uni
 
struct  yyjson_val
 
struct  yyjson_doc
 
struct  yyjson_mut_val
 
struct  yyjson_str_chunk
 
struct  yyjson_str_pool
 
struct  yyjson_val_chunk
 
struct  yyjson_val_pool
 
struct  yyjson_mut_doc
 

Macros

#define YYJSON_MSC_VER   0
 
#define YYJSON_GCC_VER   0
 
#define YYJSON_IS_REAL_GCC   0
 
#define YYJSON_STDC_VER   0
 
#define YYJSON_CPP_VER   0
 
#define yyjson_has_builtin(x)   0
 
#define yyjson_has_attribute(x)   0
 
#define yyjson_has_feature(x)   0
 
#define yyjson_has_include(x)   0
 
#define yyjson_inline
 
#define yyjson_noinline
 
#define yyjson_align(x)
 
#define yyjson_likely(expr)   (expr)
 
#define yyjson_unlikely(expr)   (expr)
 
#define YYJSON_HAS_CONSTANT_P   0
 
#define yyjson_deprecated(msg)
 
#define yyjson_api
 
#define yyjson_api_inline   static yyjson_inline
 
#define __bool_true_false_are_defined   1
 
#define YYJSON_U64_TO_F64_NO_IMPL   0
 
#define YYJSON_VERSION_MAJOR   0
 
#define YYJSON_VERSION_MINOR   9
 
#define YYJSON_VERSION_PATCH   0
 
#define YYJSON_VERSION_HEX   0x000900
 
#define YYJSON_VERSION_STRING   "0.9.0"
 
#define YYJSON_TYPE_NONE   ((uint8_t)0) /* _____000 */
 
#define YYJSON_TYPE_RAW   ((uint8_t)1) /* _____001 */
 
#define YYJSON_TYPE_NULL   ((uint8_t)2) /* _____010 */
 
#define YYJSON_TYPE_BOOL   ((uint8_t)3) /* _____011 */
 
#define YYJSON_TYPE_NUM   ((uint8_t)4) /* _____100 */
 
#define YYJSON_TYPE_STR   ((uint8_t)5) /* _____101 */
 
#define YYJSON_TYPE_ARR   ((uint8_t)6) /* _____110 */
 
#define YYJSON_TYPE_OBJ   ((uint8_t)7) /* _____111 */
 
#define YYJSON_SUBTYPE_NONE   ((uint8_t)(0 << 3)) /* ___00___ */
 
#define YYJSON_SUBTYPE_FALSE   ((uint8_t)(0 << 3)) /* ___00___ */
 
#define YYJSON_SUBTYPE_TRUE   ((uint8_t)(1 << 3)) /* ___01___ */
 
#define YYJSON_SUBTYPE_UINT   ((uint8_t)(0 << 3)) /* ___00___ */
 
#define YYJSON_SUBTYPE_SINT   ((uint8_t)(1 << 3)) /* ___01___ */
 
#define YYJSON_SUBTYPE_REAL   ((uint8_t)(2 << 3)) /* ___10___ */
 
#define YYJSON_SUBTYPE_NOESC   ((uint8_t)(1 << 3)) /* ___01___ */
 
#define YYJSON_TYPE_MASK   ((uint8_t)0x07) /* _____111 */
 
#define YYJSON_TYPE_BIT   ((uint8_t)3)
 
#define YYJSON_SUBTYPE_MASK   ((uint8_t)0x18) /* ___11___ */
 
#define YYJSON_SUBTYPE_BIT   ((uint8_t)2)
 
#define YYJSON_RESERVED_MASK   ((uint8_t)0xE0) /* 111_____ */
 
#define YYJSON_RESERVED_BIT   ((uint8_t)3)
 
#define YYJSON_TAG_MASK   ((uint8_t)0xFF) /* 11111111 */
 
#define YYJSON_TAG_BIT   ((uint8_t)8)
 
#define YYJSON_PADDING_SIZE   4
 
#define yyjson_arr_foreach(arr, idx, max, val)
 
#define yyjson_obj_foreach(obj, idx, max, key, val)
 
#define yyjson_mut_arr_foreach(arr, idx, max, val)
 
#define yyjson_mut_obj_foreach(obj, idx, max, key, val)
 

Typedefs

typedef uint8_t yyjson_type
 
typedef uint8_t yyjson_subtype
 
typedef uint32_t yyjson_read_flag
 
typedef uint32_t yyjson_read_code
 
typedef uint32_t yyjson_write_flag
 
typedef uint32_t yyjson_write_code
 
typedef uint32_t yyjson_ptr_code
 
typedef uint32_t yyjson_patch_code
 

Functions

yyjson_api uint32_t yyjson_version (void)
 
yyjson_api bool yyjson_alc_pool_init (yyjson_alc *alc, void *buf, size_t size)
 
yyjson_api yyjson_alcyyjson_alc_dyn_new (void)
 
yyjson_api void yyjson_alc_dyn_free (yyjson_alc *alc)
 
yyjson_api yyjson_docyyjson_read_opts (char *dat, size_t len, yyjson_read_flag flg, const yyjson_alc *alc, yyjson_read_err *err)
 
yyjson_api yyjson_docyyjson_read_file (const char *path, yyjson_read_flag flg, const yyjson_alc *alc, yyjson_read_err *err)
 
yyjson_api yyjson_docyyjson_read_fp (FILE *fp, yyjson_read_flag flg, const yyjson_alc *alc, yyjson_read_err *err)
 
yyjson_api_inline yyjson_docyyjson_read (const char *dat, size_t len, yyjson_read_flag flg)
 
yyjson_api_inline size_t yyjson_read_max_memory_usage (size_t len, yyjson_read_flag flg)
 
yyjson_api const char * yyjson_read_number (const char *dat, yyjson_val *val, yyjson_read_flag flg, const yyjson_alc *alc, yyjson_read_err *err)
 
yyjson_api_inline const char * yyjson_mut_read_number (const char *dat, yyjson_mut_val *val, yyjson_read_flag flg, const yyjson_alc *alc, yyjson_read_err *err)
 
yyjson_api char * yyjson_write_opts (const yyjson_doc *doc, yyjson_write_flag flg, const yyjson_alc *alc, size_t *len, yyjson_write_err *err)
 
yyjson_api bool yyjson_write_file (const char *path, const yyjson_doc *doc, yyjson_write_flag flg, const yyjson_alc *alc, yyjson_write_err *err)
 
yyjson_api bool yyjson_write_fp (FILE *fp, const yyjson_doc *doc, yyjson_write_flag flg, const yyjson_alc *alc, yyjson_write_err *err)
 
yyjson_api_inline char * yyjson_write (const yyjson_doc *doc, yyjson_write_flag flg, size_t *len)
 
yyjson_api char * yyjson_mut_write_opts (const yyjson_mut_doc *doc, yyjson_write_flag flg, const yyjson_alc *alc, size_t *len, yyjson_write_err *err)
 
yyjson_api bool yyjson_mut_write_file (const char *path, const yyjson_mut_doc *doc, yyjson_write_flag flg, const yyjson_alc *alc, yyjson_write_err *err)
 
yyjson_api bool yyjson_mut_write_fp (FILE *fp, const yyjson_mut_doc *doc, yyjson_write_flag flg, const yyjson_alc *alc, yyjson_write_err *err)
 
yyjson_api_inline char * yyjson_mut_write (const yyjson_mut_doc *doc, yyjson_write_flag flg, size_t *len)
 
yyjson_api char * yyjson_val_write_opts (const yyjson_val *val, yyjson_write_flag flg, const yyjson_alc *alc, size_t *len, yyjson_write_err *err)
 
yyjson_api bool yyjson_val_write_file (const char *path, const yyjson_val *val, yyjson_write_flag flg, const yyjson_alc *alc, yyjson_write_err *err)
 
yyjson_api bool yyjson_val_write_fp (FILE *fp, const yyjson_val *val, yyjson_write_flag flg, const yyjson_alc *alc, yyjson_write_err *err)
 
yyjson_api_inline char * yyjson_val_write (const yyjson_val *val, yyjson_write_flag flg, size_t *len)
 
yyjson_api char * yyjson_mut_val_write_opts (const yyjson_mut_val *val, yyjson_write_flag flg, const yyjson_alc *alc, size_t *len, yyjson_write_err *err)
 
yyjson_api bool yyjson_mut_val_write_file (const char *path, const yyjson_mut_val *val, yyjson_write_flag flg, const yyjson_alc *alc, yyjson_write_err *err)
 
yyjson_api bool yyjson_mut_val_write_fp (FILE *fp, const yyjson_mut_val *val, yyjson_write_flag flg, const yyjson_alc *alc, yyjson_write_err *err)
 
yyjson_api_inline char * yyjson_mut_val_write (const yyjson_mut_val *val, yyjson_write_flag flg, size_t *len)
 
yyjson_api_inline yyjson_valyyjson_doc_get_root (yyjson_doc *doc)
 
yyjson_api_inline size_t yyjson_doc_get_read_size (yyjson_doc *doc)
 
yyjson_api_inline size_t yyjson_doc_get_val_count (yyjson_doc *doc)
 
yyjson_api_inline void yyjson_doc_free (yyjson_doc *doc)
 
yyjson_api_inline bool yyjson_is_raw (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_null (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_true (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_false (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_bool (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_uint (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_sint (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_int (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_real (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_num (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_str (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_arr (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_obj (yyjson_val *val)
 
yyjson_api_inline bool yyjson_is_ctn (yyjson_val *val)
 
yyjson_api_inline yyjson_type yyjson_get_type (yyjson_val *val)
 
yyjson_api_inline yyjson_subtype yyjson_get_subtype (yyjson_val *val)
 
yyjson_api_inline uint8_t yyjson_get_tag (yyjson_val *val)
 
yyjson_api_inline const char * yyjson_get_type_desc (yyjson_val *val)
 
yyjson_api_inline const char * yyjson_get_raw (yyjson_val *val)
 
yyjson_api_inline bool yyjson_get_bool (yyjson_val *val)
 
yyjson_api_inline uint64_t yyjson_get_uint (yyjson_val *val)
 
yyjson_api_inline int64_t yyjson_get_sint (yyjson_val *val)
 
yyjson_api_inline int yyjson_get_int (yyjson_val *val)
 
yyjson_api_inline double yyjson_get_real (yyjson_val *val)
 
yyjson_api_inline double yyjson_get_num (yyjson_val *val)
 
yyjson_api_inline const char * yyjson_get_str (yyjson_val *val)
 
yyjson_api_inline size_t yyjson_get_len (yyjson_val *val)
 
yyjson_api_inline bool yyjson_equals_str (yyjson_val *val, const char *str)
 
yyjson_api_inline bool yyjson_equals_strn (yyjson_val *val, const char *str, size_t len)
 
yyjson_api_inline bool yyjson_equals (yyjson_val *lhs, yyjson_val *rhs)
 
yyjson_api_inline bool yyjson_set_raw (yyjson_val *val, const char *raw, size_t len)
 
yyjson_api_inline bool yyjson_set_null (yyjson_val *val)
 
yyjson_api_inline bool yyjson_set_bool (yyjson_val *val, bool num)
 
yyjson_api_inline bool yyjson_set_uint (yyjson_val *val, uint64_t num)
 
yyjson_api_inline bool yyjson_set_sint (yyjson_val *val, int64_t num)
 
yyjson_api_inline bool yyjson_set_int (yyjson_val *val, int num)
 
yyjson_api_inline bool yyjson_set_real (yyjson_val *val, double num)
 
yyjson_api_inline bool yyjson_set_str (yyjson_val *val, const char *str)
 
yyjson_api_inline bool yyjson_set_strn (yyjson_val *val, const char *str, size_t len)
 
yyjson_api_inline size_t yyjson_arr_size (yyjson_val *arr)
 
yyjson_api_inline yyjson_valyyjson_arr_get (yyjson_val *arr, size_t idx)
 
yyjson_api_inline yyjson_valyyjson_arr_get_first (yyjson_val *arr)
 
yyjson_api_inline yyjson_valyyjson_arr_get_last (yyjson_val *arr)
 
yyjson_api_inline bool yyjson_arr_iter_init (yyjson_val *arr, yyjson_arr_iter *iter)
 
yyjson_api_inline yyjson_arr_iter yyjson_arr_iter_with (yyjson_val *arr)
 
yyjson_api_inline bool yyjson_arr_iter_has_next (yyjson_arr_iter *iter)
 
yyjson_api_inline yyjson_valyyjson_arr_iter_next (yyjson_arr_iter *iter)
 
yyjson_api_inline size_t yyjson_obj_size (yyjson_val *obj)
 
yyjson_api_inline yyjson_valyyjson_obj_get (yyjson_val *obj, const char *key)
 
yyjson_api_inline yyjson_valyyjson_obj_getn (yyjson_val *obj, const char *key, size_t key_len)
 
yyjson_api_inline bool yyjson_obj_iter_init (yyjson_val *obj, yyjson_obj_iter *iter)
 
yyjson_api_inline yyjson_obj_iter yyjson_obj_iter_with (yyjson_val *obj)
 
yyjson_api_inline bool yyjson_obj_iter_has_next (yyjson_obj_iter *iter)
 
yyjson_api_inline yyjson_valyyjson_obj_iter_next (yyjson_obj_iter *iter)
 
yyjson_api_inline yyjson_valyyjson_obj_iter_get_val (yyjson_val *key)
 
yyjson_api_inline yyjson_valyyjson_obj_iter_get (yyjson_obj_iter *iter, const char *key)
 
yyjson_api_inline yyjson_valyyjson_obj_iter_getn (yyjson_obj_iter *iter, const char *key, size_t key_len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_get_root (yyjson_mut_doc *doc)
 
yyjson_api_inline void yyjson_mut_doc_set_root (yyjson_mut_doc *doc, yyjson_mut_val *root)
 
yyjson_api bool yyjson_mut_doc_set_str_pool_size (yyjson_mut_doc *doc, size_t len)
 
yyjson_api bool yyjson_mut_doc_set_val_pool_size (yyjson_mut_doc *doc, size_t count)
 
yyjson_api void yyjson_mut_doc_free (yyjson_mut_doc *doc)
 
yyjson_api yyjson_mut_docyyjson_mut_doc_new (const yyjson_alc *alc)
 
yyjson_api yyjson_mut_docyyjson_doc_mut_copy (yyjson_doc *doc, const yyjson_alc *alc)
 
yyjson_api yyjson_mut_docyyjson_mut_doc_mut_copy (yyjson_mut_doc *doc, const yyjson_alc *alc)
 
yyjson_api yyjson_mut_valyyjson_val_mut_copy (yyjson_mut_doc *doc, yyjson_val *val)
 
yyjson_api yyjson_mut_valyyjson_mut_val_mut_copy (yyjson_mut_doc *doc, yyjson_mut_val *val)
 
yyjson_api yyjson_docyyjson_mut_doc_imut_copy (yyjson_mut_doc *doc, const yyjson_alc *alc)
 
yyjson_api yyjson_docyyjson_mut_val_imut_copy (yyjson_mut_val *val, const yyjson_alc *alc)
 
yyjson_api_inline bool yyjson_mut_is_raw (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_null (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_true (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_false (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_bool (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_uint (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_sint (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_int (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_real (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_num (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_str (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_arr (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_obj (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_is_ctn (yyjson_mut_val *val)
 
yyjson_api_inline yyjson_type yyjson_mut_get_type (yyjson_mut_val *val)
 
yyjson_api_inline yyjson_subtype yyjson_mut_get_subtype (yyjson_mut_val *val)
 
yyjson_api_inline uint8_t yyjson_mut_get_tag (yyjson_mut_val *val)
 
yyjson_api_inline const char * yyjson_mut_get_type_desc (yyjson_mut_val *val)
 
yyjson_api_inline const char * yyjson_mut_get_raw (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_get_bool (yyjson_mut_val *val)
 
yyjson_api_inline uint64_t yyjson_mut_get_uint (yyjson_mut_val *val)
 
yyjson_api_inline int64_t yyjson_mut_get_sint (yyjson_mut_val *val)
 
yyjson_api_inline int yyjson_mut_get_int (yyjson_mut_val *val)
 
yyjson_api_inline double yyjson_mut_get_real (yyjson_mut_val *val)
 
yyjson_api_inline double yyjson_mut_get_num (yyjson_mut_val *val)
 
yyjson_api_inline const char * yyjson_mut_get_str (yyjson_mut_val *val)
 
yyjson_api_inline size_t yyjson_mut_get_len (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_equals_str (yyjson_mut_val *val, const char *str)
 
yyjson_api_inline bool yyjson_mut_equals_strn (yyjson_mut_val *val, const char *str, size_t len)
 
yyjson_api_inline bool yyjson_mut_equals (yyjson_mut_val *lhs, yyjson_mut_val *rhs)
 
yyjson_api_inline bool yyjson_mut_set_raw (yyjson_mut_val *val, const char *raw, size_t len)
 
yyjson_api_inline bool yyjson_mut_set_null (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_set_bool (yyjson_mut_val *val, bool num)
 
yyjson_api_inline bool yyjson_mut_set_uint (yyjson_mut_val *val, uint64_t num)
 
yyjson_api_inline bool yyjson_mut_set_sint (yyjson_mut_val *val, int64_t num)
 
yyjson_api_inline bool yyjson_mut_set_int (yyjson_mut_val *val, int num)
 
yyjson_api_inline bool yyjson_mut_set_real (yyjson_mut_val *val, double num)
 
yyjson_api_inline bool yyjson_mut_set_str (yyjson_mut_val *val, const char *str)
 
yyjson_api_inline bool yyjson_mut_set_strn (yyjson_mut_val *val, const char *str, size_t len)
 
yyjson_api_inline bool yyjson_mut_set_arr (yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_set_obj (yyjson_mut_val *val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_raw (yyjson_mut_doc *doc, const char *str)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_rawn (yyjson_mut_doc *doc, const char *str, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_rawcpy (yyjson_mut_doc *doc, const char *str)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_rawncpy (yyjson_mut_doc *doc, const char *str, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_null (yyjson_mut_doc *doc)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_true (yyjson_mut_doc *doc)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_false (yyjson_mut_doc *doc)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_bool (yyjson_mut_doc *doc, bool val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_uint (yyjson_mut_doc *doc, uint64_t num)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_sint (yyjson_mut_doc *doc, int64_t num)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_int (yyjson_mut_doc *doc, int64_t num)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_real (yyjson_mut_doc *doc, double num)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_str (yyjson_mut_doc *doc, const char *str)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_strn (yyjson_mut_doc *doc, const char *str, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_strcpy (yyjson_mut_doc *doc, const char *str)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_strncpy (yyjson_mut_doc *doc, const char *str, size_t len)
 
yyjson_api_inline size_t yyjson_mut_arr_size (yyjson_mut_val *arr)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_get (yyjson_mut_val *arr, size_t idx)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_get_first (yyjson_mut_val *arr)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_get_last (yyjson_mut_val *arr)
 
yyjson_api_inline bool yyjson_mut_arr_iter_init (yyjson_mut_val *arr, yyjson_mut_arr_iter *iter)
 
yyjson_api_inline yyjson_mut_arr_iter yyjson_mut_arr_iter_with (yyjson_mut_val *arr)
 
yyjson_api_inline bool yyjson_mut_arr_iter_has_next (yyjson_mut_arr_iter *iter)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_iter_next (yyjson_mut_arr_iter *iter)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_iter_remove (yyjson_mut_arr_iter *iter)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr (yyjson_mut_doc *doc)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_bool (yyjson_mut_doc *doc, const bool *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_sint (yyjson_mut_doc *doc, const int64_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_uint (yyjson_mut_doc *doc, const uint64_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_real (yyjson_mut_doc *doc, const double *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_sint8 (yyjson_mut_doc *doc, const int8_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_sint16 (yyjson_mut_doc *doc, const int16_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_sint32 (yyjson_mut_doc *doc, const int32_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_sint64 (yyjson_mut_doc *doc, const int64_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_uint8 (yyjson_mut_doc *doc, const uint8_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_uint16 (yyjson_mut_doc *doc, const uint16_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_uint32 (yyjson_mut_doc *doc, const uint32_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_uint64 (yyjson_mut_doc *doc, const uint64_t *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_float (yyjson_mut_doc *doc, const float *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_double (yyjson_mut_doc *doc, const double *vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_str (yyjson_mut_doc *doc, const char **vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_strn (yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_strcpy (yyjson_mut_doc *doc, const char **vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_with_strncpy (yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count)
 
yyjson_api_inline bool yyjson_mut_arr_insert (yyjson_mut_val *arr, yyjson_mut_val *val, size_t idx)
 
yyjson_api_inline bool yyjson_mut_arr_append (yyjson_mut_val *arr, yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_arr_prepend (yyjson_mut_val *arr, yyjson_mut_val *val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_replace (yyjson_mut_val *arr, size_t idx, yyjson_mut_val *val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_remove (yyjson_mut_val *arr, size_t idx)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_remove_first (yyjson_mut_val *arr)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_remove_last (yyjson_mut_val *arr)
 
yyjson_api_inline bool yyjson_mut_arr_remove_range (yyjson_mut_val *arr, size_t idx, size_t len)
 
yyjson_api_inline bool yyjson_mut_arr_clear (yyjson_mut_val *arr)
 
yyjson_api_inline bool yyjson_mut_arr_rotate (yyjson_mut_val *arr, size_t idx)
 
yyjson_api_inline bool yyjson_mut_arr_add_val (yyjson_mut_val *arr, yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_arr_add_null (yyjson_mut_doc *doc, yyjson_mut_val *arr)
 
yyjson_api_inline bool yyjson_mut_arr_add_true (yyjson_mut_doc *doc, yyjson_mut_val *arr)
 
yyjson_api_inline bool yyjson_mut_arr_add_false (yyjson_mut_doc *doc, yyjson_mut_val *arr)
 
yyjson_api_inline bool yyjson_mut_arr_add_bool (yyjson_mut_doc *doc, yyjson_mut_val *arr, bool val)
 
yyjson_api_inline bool yyjson_mut_arr_add_uint (yyjson_mut_doc *doc, yyjson_mut_val *arr, uint64_t num)
 
yyjson_api_inline bool yyjson_mut_arr_add_sint (yyjson_mut_doc *doc, yyjson_mut_val *arr, int64_t num)
 
yyjson_api_inline bool yyjson_mut_arr_add_int (yyjson_mut_doc *doc, yyjson_mut_val *arr, int64_t num)
 
yyjson_api_inline bool yyjson_mut_arr_add_real (yyjson_mut_doc *doc, yyjson_mut_val *arr, double num)
 
yyjson_api_inline bool yyjson_mut_arr_add_str (yyjson_mut_doc *doc, yyjson_mut_val *arr, const char *str)
 
yyjson_api_inline bool yyjson_mut_arr_add_strn (yyjson_mut_doc *doc, yyjson_mut_val *arr, const char *str, size_t len)
 
yyjson_api_inline bool yyjson_mut_arr_add_strcpy (yyjson_mut_doc *doc, yyjson_mut_val *arr, const char *str)
 
yyjson_api_inline bool yyjson_mut_arr_add_strncpy (yyjson_mut_doc *doc, yyjson_mut_val *arr, const char *str, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_add_arr (yyjson_mut_doc *doc, yyjson_mut_val *arr)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_arr_add_obj (yyjson_mut_doc *doc, yyjson_mut_val *arr)
 
yyjson_api_inline size_t yyjson_mut_obj_size (yyjson_mut_val *obj)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_get (yyjson_mut_val *obj, const char *key)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_getn (yyjson_mut_val *obj, const char *key, size_t key_len)
 
yyjson_api_inline bool yyjson_mut_obj_iter_init (yyjson_mut_val *obj, yyjson_mut_obj_iter *iter)
 
yyjson_api_inline yyjson_mut_obj_iter yyjson_mut_obj_iter_with (yyjson_mut_val *obj)
 
yyjson_api_inline bool yyjson_mut_obj_iter_has_next (yyjson_mut_obj_iter *iter)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_iter_next (yyjson_mut_obj_iter *iter)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_iter_get_val (yyjson_mut_val *key)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_iter_remove (yyjson_mut_obj_iter *iter)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_iter_get (yyjson_mut_obj_iter *iter, const char *key)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_iter_getn (yyjson_mut_obj_iter *iter, const char *key, size_t key_len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj (yyjson_mut_doc *doc)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_with_str (yyjson_mut_doc *doc, const char **keys, const char **vals, size_t count)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_with_kv (yyjson_mut_doc *doc, const char **kv_pairs, size_t pair_count)
 
yyjson_api_inline bool yyjson_mut_obj_add (yyjson_mut_val *obj, yyjson_mut_val *key, yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_obj_put (yyjson_mut_val *obj, yyjson_mut_val *key, yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_obj_insert (yyjson_mut_val *obj, yyjson_mut_val *key, yyjson_mut_val *val, size_t idx)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_remove (yyjson_mut_val *obj, yyjson_mut_val *key)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_remove_key (yyjson_mut_val *obj, const char *key)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_remove_keyn (yyjson_mut_val *obj, const char *key, size_t key_len)
 
yyjson_api_inline bool yyjson_mut_obj_clear (yyjson_mut_val *obj)
 
yyjson_api_inline bool yyjson_mut_obj_replace (yyjson_mut_val *obj, yyjson_mut_val *key, yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_mut_obj_rotate (yyjson_mut_val *obj, size_t idx)
 
yyjson_api_inline bool yyjson_mut_obj_add_null (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key)
 
yyjson_api_inline bool yyjson_mut_obj_add_true (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key)
 
yyjson_api_inline bool yyjson_mut_obj_add_false (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key)
 
yyjson_api_inline bool yyjson_mut_obj_add_bool (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, bool val)
 
yyjson_api_inline bool yyjson_mut_obj_add_uint (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, uint64_t val)
 
yyjson_api_inline bool yyjson_mut_obj_add_sint (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, int64_t val)
 
yyjson_api_inline bool yyjson_mut_obj_add_int (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, int64_t val)
 
yyjson_api_inline bool yyjson_mut_obj_add_real (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, double val)
 
yyjson_api_inline bool yyjson_mut_obj_add_str (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, const char *val)
 
yyjson_api_inline bool yyjson_mut_obj_add_strn (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, const char *val, size_t len)
 
yyjson_api_inline bool yyjson_mut_obj_add_strcpy (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, const char *val)
 
yyjson_api_inline bool yyjson_mut_obj_add_strncpy (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, const char *val, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_add_arr (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_add_obj (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key)
 
yyjson_api_inline bool yyjson_mut_obj_add_val (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, yyjson_mut_val *val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_remove_str (yyjson_mut_val *obj, const char *key)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_obj_remove_strn (yyjson_mut_val *obj, const char *key, size_t len)
 
yyjson_api_inline bool yyjson_mut_obj_rename_key (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, const char *new_key)
 
yyjson_api_inline bool yyjson_mut_obj_rename_keyn (yyjson_mut_doc *doc, yyjson_mut_val *obj, const char *key, size_t len, const char *new_key, size_t new_len)
 
yyjson_api_inline yyjson_valyyjson_doc_ptr_get (yyjson_doc *doc, const char *ptr)
 
yyjson_api_inline yyjson_valyyjson_doc_ptr_getn (yyjson_doc *doc, const char *ptr, size_t len)
 
yyjson_api_inline yyjson_valyyjson_doc_ptr_getx (yyjson_doc *doc, const char *ptr, size_t len, yyjson_ptr_err *err)
 
yyjson_api_inline yyjson_valyyjson_ptr_get (yyjson_val *val, const char *ptr)
 
yyjson_api_inline yyjson_valyyjson_ptr_getn (yyjson_val *val, const char *ptr, size_t len)
 
yyjson_api_inline yyjson_valyyjson_ptr_getx (yyjson_val *val, const char *ptr, size_t len, yyjson_ptr_err *err)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_get (yyjson_mut_doc *doc, const char *ptr)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_getn (yyjson_mut_doc *doc, const char *ptr, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_getx (yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_get (yyjson_mut_val *val, const char *ptr)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_getn (yyjson_mut_val *val, const char *ptr, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_getx (yyjson_mut_val *val, const char *ptr, size_t len, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline bool yyjson_mut_doc_ptr_add (yyjson_mut_doc *doc, const char *ptr, yyjson_mut_val *new_val)
 
yyjson_api_inline bool yyjson_mut_doc_ptr_addn (yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val)
 
yyjson_api_inline bool yyjson_mut_doc_ptr_addx (yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val, bool create_parent, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline bool yyjson_mut_ptr_add (yyjson_mut_val *val, const char *ptr, yyjson_mut_val *new_val, yyjson_mut_doc *doc)
 
yyjson_api_inline bool yyjson_mut_ptr_addn (yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val, yyjson_mut_doc *doc)
 
yyjson_api_inline bool yyjson_mut_ptr_addx (yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val, yyjson_mut_doc *doc, bool create_parent, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline bool yyjson_mut_doc_ptr_set (yyjson_mut_doc *doc, const char *ptr, yyjson_mut_val *new_val)
 
yyjson_api_inline bool yyjson_mut_doc_ptr_setn (yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val)
 
yyjson_api_inline bool yyjson_mut_doc_ptr_setx (yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val, bool create_parent, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline bool yyjson_mut_ptr_set (yyjson_mut_val *val, const char *ptr, yyjson_mut_val *new_val, yyjson_mut_doc *doc)
 
yyjson_api_inline bool yyjson_mut_ptr_setn (yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val, yyjson_mut_doc *doc)
 
yyjson_api_inline bool yyjson_mut_ptr_setx (yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val, yyjson_mut_doc *doc, bool create_parent, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_replace (yyjson_mut_doc *doc, const char *ptr, yyjson_mut_val *new_val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_replacen (yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_replacex (yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_mut_val *new_val, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_replace (yyjson_mut_val *val, const char *ptr, yyjson_mut_val *new_val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_replacen (yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_replacex (yyjson_mut_val *val, const char *ptr, size_t len, yyjson_mut_val *new_val, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_remove (yyjson_mut_doc *doc, const char *ptr)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_removen (yyjson_mut_doc *doc, const char *ptr, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_doc_ptr_removex (yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_remove (yyjson_mut_val *val, const char *ptr)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_removen (yyjson_mut_val *val, const char *ptr, size_t len)
 
yyjson_api_inline yyjson_mut_valyyjson_mut_ptr_removex (yyjson_mut_val *val, const char *ptr, size_t len, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
 
yyjson_api_inline bool yyjson_ptr_ctx_append (yyjson_ptr_ctx *ctx, yyjson_mut_val *key, yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_ptr_ctx_replace (yyjson_ptr_ctx *ctx, yyjson_mut_val *val)
 
yyjson_api_inline bool yyjson_ptr_ctx_remove (yyjson_ptr_ctx *ctx)
 
yyjson_api yyjson_mut_valyyjson_patch (yyjson_mut_doc *doc, yyjson_val *orig, yyjson_val *patch, yyjson_patch_err *err)
 
yyjson_api yyjson_mut_valyyjson_mut_patch (yyjson_mut_doc *doc, yyjson_mut_val *orig, yyjson_mut_val *patch, yyjson_patch_err *err)
 
yyjson_api yyjson_mut_valyyjson_merge_patch (yyjson_mut_doc *doc, yyjson_val *orig, yyjson_val *patch)
 
yyjson_api yyjson_mut_valyyjson_mut_merge_patch (yyjson_mut_doc *doc, yyjson_mut_val *orig, yyjson_mut_val *patch)
 
yyjson_api_inline bool yyjson_ptr_get_bool (yyjson_val *root, const char *ptr, bool *value)
 
yyjson_api_inline bool yyjson_ptr_get_uint (yyjson_val *root, const char *ptr, uint64_t *value)
 
yyjson_api_inline bool yyjson_ptr_get_sint (yyjson_val *root, const char *ptr, int64_t *value)
 
yyjson_api_inline bool yyjson_ptr_get_real (yyjson_val *root, const char *ptr, double *value)
 
yyjson_api_inline bool yyjson_ptr_get_num (yyjson_val *root, const char *ptr, double *value)
 
yyjson_api_inline bool yyjson_ptr_get_str (yyjson_val *root, const char *ptr, const char **value)
 
 yyjson_deprecated ("renamed to yyjson_doc_ptr_get") yyjson_api_inline yyjson_val *yyjson_doc_get_pointer(yyjson_doc *doc
 
 yyjson_deprecated ("renamed to yyjson_doc_ptr_getn") yyjson_api_inline yyjson_val *yyjson_doc_get_pointern(yyjson_doc *doc
 
 yyjson_deprecated ("renamed to yyjson_mut_doc_ptr_get") yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_pointer(yyjson_mut_doc *doc
 
 yyjson_deprecated ("renamed to yyjson_mut_doc_ptr_getn") yyjson_api_inline yyjson_mut_val *yyjson_mut_doc_get_pointern(yyjson_mut_doc *doc
 
 yyjson_deprecated ("renamed to yyjson_ptr_get") yyjson_api_inline yyjson_val *yyjson_get_pointer(yyjson_val *val
 
 yyjson_deprecated ("renamed to yyjson_ptr_getn") yyjson_api_inline yyjson_val *yyjson_get_pointern(yyjson_val *val
 
 yyjson_deprecated ("renamed to yyjson_mut_ptr_get") yyjson_api_inline yyjson_mut_val *yyjson_mut_get_pointer(yyjson_mut_val *val
 
 yyjson_deprecated ("renamed to yyjson_mut_ptr_getn") yyjson_api_inline yyjson_mut_val *yyjson_mut_get_pointern(yyjson_mut_val *val
 
 yyjson_deprecated ("renamed to unsafe_yyjson_ptr_getn") yyjson_api_inline yyjson_val *unsafe_yyjson_get_pointer(yyjson_val *val
 
 yyjson_deprecated ("renamed to unsafe_yyjson_mut_ptr_getx") yyjson_api_inline yyjson_mut_val *unsafe_yyjson_mut_get_pointer(yyjson_mut_val *val
 

Variables

static const yyjson_read_flag YYJSON_READ_NOFLAG = 0
 
static const yyjson_read_flag YYJSON_READ_INSITU = 1 << 0
 
static const yyjson_read_flag YYJSON_READ_STOP_WHEN_DONE = 1 << 1
 
static const yyjson_read_flag YYJSON_READ_ALLOW_TRAILING_COMMAS = 1 << 2
 
static const yyjson_read_flag YYJSON_READ_ALLOW_COMMENTS = 1 << 3
 
static const yyjson_read_flag YYJSON_READ_ALLOW_INF_AND_NAN = 1 << 4
 
static const yyjson_read_flag YYJSON_READ_NUMBER_AS_RAW = 1 << 5
 
static const yyjson_read_flag YYJSON_READ_ALLOW_INVALID_UNICODE = 1 << 6
 
static const yyjson_read_flag YYJSON_READ_BIGNUM_AS_RAW = 1 << 7
 
static const yyjson_read_code YYJSON_READ_SUCCESS = 0
 
static const yyjson_read_code YYJSON_READ_ERROR_INVALID_PARAMETER = 1
 
static const yyjson_read_code YYJSON_READ_ERROR_MEMORY_ALLOCATION = 2
 
static const yyjson_read_code YYJSON_READ_ERROR_EMPTY_CONTENT = 3
 
static const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_CONTENT = 4
 
static const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_END = 5
 
static const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_CHARACTER = 6
 
static const yyjson_read_code YYJSON_READ_ERROR_JSON_STRUCTURE = 7
 
static const yyjson_read_code YYJSON_READ_ERROR_INVALID_COMMENT = 8
 
static const yyjson_read_code YYJSON_READ_ERROR_INVALID_NUMBER = 9
 
static const yyjson_read_code YYJSON_READ_ERROR_INVALID_STRING = 10
 
static const yyjson_read_code YYJSON_READ_ERROR_LITERAL = 11
 
static const yyjson_read_code YYJSON_READ_ERROR_FILE_OPEN = 12
 
static const yyjson_read_code YYJSON_READ_ERROR_FILE_READ = 13
 
static const yyjson_write_flag YYJSON_WRITE_NOFLAG = 0
 
static const yyjson_write_flag YYJSON_WRITE_PRETTY = 1 << 0
 
static const yyjson_write_flag YYJSON_WRITE_ESCAPE_UNICODE = 1 << 1
 
static const yyjson_write_flag YYJSON_WRITE_ESCAPE_SLASHES = 1 << 2
 
static const yyjson_write_flag YYJSON_WRITE_ALLOW_INF_AND_NAN = 1 << 3
 
static const yyjson_write_flag YYJSON_WRITE_INF_AND_NAN_AS_NULL = 1 << 4
 
static const yyjson_write_flag YYJSON_WRITE_ALLOW_INVALID_UNICODE = 1 << 5
 
static const yyjson_write_flag YYJSON_WRITE_PRETTY_TWO_SPACES = 1 << 6
 
static const yyjson_write_flag YYJSON_WRITE_NEWLINE_AT_END = 1 << 7
 
static const yyjson_write_code YYJSON_WRITE_SUCCESS = 0
 
static const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_PARAMETER = 1
 
static const yyjson_write_code YYJSON_WRITE_ERROR_MEMORY_ALLOCATION = 2
 
static const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_VALUE_TYPE = 3
 
static const yyjson_write_code YYJSON_WRITE_ERROR_NAN_OR_INF = 4
 
static const yyjson_write_code YYJSON_WRITE_ERROR_FILE_OPEN = 5
 
static const yyjson_write_code YYJSON_WRITE_ERROR_FILE_WRITE = 6
 
static const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_STRING = 7
 
static const yyjson_ptr_code YYJSON_PTR_ERR_NONE = 0
 
static const yyjson_ptr_code YYJSON_PTR_ERR_PARAMETER = 1
 
static const yyjson_ptr_code YYJSON_PTR_ERR_SYNTAX = 2
 
static const yyjson_ptr_code YYJSON_PTR_ERR_RESOLVE = 3
 
static const yyjson_ptr_code YYJSON_PTR_ERR_NULL_ROOT = 4
 
static const yyjson_ptr_code YYJSON_PTR_ERR_SET_ROOT = 5
 
static const yyjson_ptr_code YYJSON_PTR_ERR_MEMORY_ALLOCATION = 6
 
static const yyjson_patch_code YYJSON_PATCH_SUCCESS = 0
 
static const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_PARAMETER = 1
 
static const yyjson_patch_code YYJSON_PATCH_ERROR_MEMORY_ALLOCATION = 2
 
static const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_OPERATION = 3
 
static const yyjson_patch_code YYJSON_PATCH_ERROR_MISSING_KEY = 4
 
static const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_MEMBER = 5
 
static const yyjson_patch_code YYJSON_PATCH_ERROR_EQUAL = 6
 
static const yyjson_patch_code YYJSON_PATCH_ERROR_POINTER = 7
 

Detailed Description

Date
2019-03-09
Author
YaoYuan

Data Structure Documentation

◆ yyjson_read_err

struct yyjson_read_err

Error information for JSON reader.

Data Fields
yyjson_read_code code

Error code, see yyjson_read_code for all possible values.

const char * msg

Error message, constant, no need to free (NULL if success).

size_t pos

Error byte position for input data (0 if success).

◆ yyjson_write_err

struct yyjson_write_err

Error information for JSON writer.

Data Fields
yyjson_write_code code

Error code, see yyjson_write_code for all possible values.

const char * msg

Error message, constant, no need to free (NULL if success).

◆ yyjson_arr_iter

struct yyjson_arr_iter

A JSON array iterator.

Example
while ((val = yyjson_arr_iter_next(&iter))) {
your_func(val);
}
yyjson_api_inline yyjson_arr_iter yyjson_arr_iter_with(yyjson_val *arr)
Definition: yyjson.h:5125
yyjson_api_inline yyjson_val * yyjson_arr_iter_next(yyjson_arr_iter *iter)
Definition: yyjson.h:5135
Definition: yyjson.h:1810
Definition: yyjson.h:4496
Data Fields
yyjson_val * cur

next value

size_t idx

next value's index

size_t max

maximum index (arr.size)

◆ yyjson_obj_iter

struct yyjson_obj_iter

A JSON object iterator.

Example
yyjson_val *key, *val;
while ((key = yyjson_obj_iter_next(&iter))) {
your_func(key, val);
}
yyjson_api_inline yyjson_val * yyjson_obj_iter_get_val(yyjson_val *key)
Definition: yyjson.h:5214
yyjson_api_inline yyjson_obj_iter yyjson_obj_iter_with(yyjson_val *obj)
Definition: yyjson.h:5194
yyjson_api_inline yyjson_val * yyjson_obj_iter_next(yyjson_obj_iter *iter)
Definition: yyjson.h:5204
yyjson_val * obj
Definition: yyjson.h:1938
Definition: yyjson.h:1934

If the ordering of the keys is known at compile-time, you can use this method to speed up value lookups:

// {"k1":1, "k2": 3, "k3": 3}
yyjson_val *key, *val;
yyjson_val *v1 = yyjson_obj_iter_get(&iter, "k1");
yyjson_val *v3 = yyjson_obj_iter_get(&iter, "k3");
yyjson_api_inline yyjson_val * yyjson_obj_iter_get(yyjson_obj_iter *iter, const char *key)
Definition: yyjson.h:5218
See also
yyjson_obj_iter_get() and yyjson_obj_iter_getn()
Data Fields
yyjson_val * cur

next key

size_t idx

next key's index

size_t max

maximum key index (obj.size)

yyjson_val * obj

the object being iterated

◆ yyjson_mut_arr_iter

struct yyjson_mut_arr_iter

A mutable JSON array iterator.

Warning
You should not modify the array while iterating over it, but you can use yyjson_mut_arr_iter_remove() to remove current value.
Example
while ((val = yyjson_mut_arr_iter_next(&iter))) {
your_func(val);
if (your_val_is_unused(val)) {
}
}
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_iter_remove(yyjson_mut_arr_iter *iter)
Definition: yyjson.h:5871
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_iter_next(yyjson_mut_arr_iter *iter)
Definition: yyjson.h:5859
yyjson_api_inline yyjson_mut_arr_iter yyjson_mut_arr_iter_with(yyjson_mut_val *arr)
Definition: yyjson.h:5848
yyjson_mut_val * arr
Definition: yyjson.h:2495
Definition: yyjson.h:2490
Definition: yyjson.h:5263
Data Fields
yyjson_mut_val * arr

the array being iterated

yyjson_mut_val * cur

current value

size_t idx

next value's index

size_t max

maximum index (arr.size)

yyjson_mut_val * pre

previous value

◆ yyjson_mut_obj_iter

struct yyjson_mut_obj_iter

A mutable JSON object iterator.

Warning
You should not modify the object while iterating over it, but you can use yyjson_mut_obj_iter_remove() to remove current value.
Example
yyjson_mut_val *key, *val;
while ((key = yyjson_mut_obj_iter_next(&iter))) {
your_func(key, val);
if (your_val_is_unused(key, val)) {
}
}
yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_next(yyjson_mut_obj_iter *iter)
Definition: yyjson.h:6495
yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_remove(yyjson_mut_obj_iter *iter)
Definition: yyjson.h:6512
yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_get_val(yyjson_mut_val *key)
Definition: yyjson.h:6507
yyjson_mut_val * obj
Definition: yyjson.h:3297
yyjson_api_inline yyjson_mut_obj_iter yyjson_mut_obj_iter_with(yyjson_mut_val *obj)
Definition: yyjson.h:6484
Definition: yyjson.h:3292

If the ordering of the keys is known at compile-time, you can use this method to speed up value lookups:

// {"k1":1, "k2": 3, "k3": 3}
yyjson_mut_val *key, *val;
yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_get(yyjson_mut_obj_iter *iter, const char *key)
Definition: yyjson.h:6529
See also
yyjson_mut_obj_iter_get() and yyjson_mut_obj_iter_getn()
Data Fields
yyjson_mut_val * cur

current key

size_t idx

next key's index

size_t max

maximum key index (obj.size)

yyjson_mut_val * obj

the object being iterated

yyjson_mut_val * pre

previous key

◆ yyjson_ptr_err

struct yyjson_ptr_err

Error information for JSON pointer.

Data Fields
yyjson_ptr_code code

Error code, see yyjson_ptr_code for all possible values.

const char * msg

Error message, constant, no need to free (NULL if no error).

size_t pos

Error byte position for input JSON pointer (0 if no error).

◆ yyjson_ptr_ctx

struct yyjson_ptr_ctx

A context for JSON pointer operation.

This struct stores the context of JSON Pointer operation result. The struct can be used with three helper functions: ctx_append(), ctx_replace(), and ctx_remove(), which perform the corresponding operations on the container without re-parsing the JSON Pointer.

For example:

// doc before: {"a":[0,1,null]}
// ptr: "/a/2"
val = yyjson_mut_doc_ptr_getx(doc, ptr, strlen(ptr), &ctx, &err);
if (yyjson_is_null(val)) {
}
// doc after: {"a":[0,1]}
yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_getx(yyjson_mut_doc *doc, const char *ptr, size_t len, yyjson_ptr_ctx *ctx, yyjson_ptr_err *err)
Definition: yyjson.h:7181
yyjson_api_inline bool yyjson_is_null(yyjson_val *val)
Definition: yyjson.h:4852
yyjson_api_inline bool yyjson_ptr_ctx_remove(yyjson_ptr_ctx *ctx)
Definition: yyjson.h:7687
Data Fields
yyjson_mut_val * ctn

The container (parent) of the target value. It can be either an array or an object. If the target location has no value, but all its parent containers exist, and the target location can be used to insert a new value, then ctn is the parent container of the target location. Otherwise, ctn is NULL.

yyjson_mut_val * old

The removed value if the operation is set, replace or remove. It can be used to restore the original state of the document if needed.

yyjson_mut_val * pre

The previous sibling of the target value. It can be either a value in an array or a key in an object. As the container is a circular linked list of elements, pre is the previous node of the target value. If the operation is add or set, then pre is the previous node of the new value, not the original target value. If the target value does not exist, pre is NULL.

◆ yyjson_patch_err

struct yyjson_patch_err

Error information for JSON patch.

Data Fields
yyjson_patch_code code

Error code, see yyjson_patch_code for all possible values.

size_t idx

Index of the error operation (0 if no error).

const char * msg

Error message, constant, no need to free (NULL if no error).

yyjson_ptr_err ptr

JSON pointer error if code == YYJSON_PATCH_ERROR_POINTER.

◆ yyjson_val_uni

union yyjson_val_uni

Payload of a JSON value (8 bytes).

◆ yyjson_val

struct yyjson_val

Immutable JSON value, 16 bytes.

An immutable value for reading JSON. A JSON Value has the same lifetime as its document. The memory is held by its document and and cannot be freed alone.

Data Fields
uint64_t tag

type, subtype and length

yyjson_val_uni uni

payload

◆ yyjson_doc

struct yyjson_doc

An immutable document for reading JSON. This document holds memory for all its JSON values and strings. When it is no longer used, the user should call yyjson_doc_free() to free its memory.

Data Fields
yyjson_alc alc

Allocator used by document (nonnull).

size_t dat_read

The total number of bytes read when parsing JSON (nonzero).

yyjson_val * root

Root value of the document (nonnull).

char * str_pool

The string pool used by JSON values (nullable).

size_t val_read

The total number of value read when parsing JSON (nonzero).

◆ yyjson_mut_val

struct yyjson_mut_val

Mutable JSON value, 24 bytes. The 'tag' and 'uni' field is same as immutable value. The 'next' field links all elements inside the container to be a cycle.

A mutable value for building JSON. A JSON Value has the same lifetime as its document. The memory is held by its document and and cannot be freed alone.

Data Fields
yyjson_mut_val * next

the next value in circular linked list

uint64_t tag

type, subtype and length

yyjson_val_uni uni

payload

◆ yyjson_str_chunk

struct yyjson_str_chunk

A memory chunk in string memory pool.

◆ yyjson_str_pool

struct yyjson_str_pool

A memory pool to hold all strings in a mutable document.

◆ yyjson_val_chunk

struct yyjson_val_chunk

A memory chunk in value memory pool. sizeof(yyjson_val_chunk) should not larger than sizeof(yyjson_mut_val).

◆ yyjson_val_pool

struct yyjson_val_pool

A memory pool to hold all values in a mutable document.

◆ yyjson_mut_doc

struct yyjson_mut_doc

A mutable document for building JSON. This document holds memory for all its JSON values and strings. When it is no longer used, the user should call yyjson_mut_doc_free() to free its memory.

Data Fields
yyjson_alc alc

a valid allocator, nonnull

yyjson_mut_val * root

root value of the JSON document, nullable

yyjson_str_pool str_pool

string memory pool

yyjson_val_pool val_pool

value memory pool

Macro Definition Documentation

◆ __bool_true_false_are_defined

#define __bool_true_false_are_defined   1

stdint (C89 compatible) stdbool (C89 compatible)

◆ yyjson_align

#define yyjson_align (   x)

align for compiler

◆ yyjson_api

#define yyjson_api

function export

◆ yyjson_api_inline

#define yyjson_api_inline   static yyjson_inline

inline function export

◆ yyjson_arr_foreach

#define yyjson_arr_foreach (   arr,
  idx,
  max,
  val 
)
Value:
for ((idx) = 0, \
(max) = yyjson_arr_size(arr), \
(val) = yyjson_arr_get_first(arr); \
(idx) < (max); \
(idx)++, \
(val) = unsafe_yyjson_get_next(val))
yyjson_api_inline size_t yyjson_arr_size(yyjson_val *arr)
Definition: yyjson.h:5063
yyjson_api_inline yyjson_val * yyjson_arr_get_first(yyjson_val *arr)
Definition: yyjson.h:5082

Macro for iterating over an array. It works like iterator, but with a more intuitive API.

Example
size_t idx, max;
yyjson_arr_foreach(arr, idx, max, val) {
your_func(idx, val);
}
#define yyjson_arr_foreach(arr, idx, max, val)
Definition: yyjson.h:1866

◆ YYJSON_CPP_VER

#define YYJSON_CPP_VER   0

C++ version

◆ yyjson_deprecated

#define yyjson_deprecated (   msg)

deprecate warning

◆ YYJSON_GCC_VER

#define YYJSON_GCC_VER   0

compiler version (GCC)

◆ yyjson_has_attribute

#define yyjson_has_attribute (   x)    0

compiler attribute check (since gcc 5.0, clang 2.9, icc 17)

◆ yyjson_has_builtin

#define yyjson_has_builtin (   x)    0

compiler builtin check (since gcc 10.0, clang 2.6, icc 2021)

◆ YYJSON_HAS_CONSTANT_P

#define YYJSON_HAS_CONSTANT_P   0

compile-time constant check for compiler

◆ yyjson_has_feature

#define yyjson_has_feature (   x)    0

compiler feature check (since clang 2.6, icc 17)

◆ yyjson_has_include

#define yyjson_has_include (   x)    0

include check (since gcc 5.0, clang 2.7, icc 16, msvc 2017 15.3)

◆ yyjson_inline

#define yyjson_inline

inline for compiler

◆ YYJSON_IS_REAL_GCC

#define YYJSON_IS_REAL_GCC   0

real gcc check

◆ yyjson_likely

#define yyjson_likely (   expr)    (expr)

likely for compiler

◆ YYJSON_MSC_VER

#define YYJSON_MSC_VER   0

compiler version (MSVC)

◆ yyjson_mut_arr_foreach

#define yyjson_mut_arr_foreach (   arr,
  idx,
  max,
  val 
)
Value:
for ((idx) = 0, \
(max) = yyjson_mut_arr_size(arr), \
(val) = yyjson_mut_arr_get_first(arr); \
(idx) < (max); \
(idx)++, \
(val) = (val)->next)
yyjson_api_inline size_t yyjson_mut_arr_size(yyjson_mut_val *arr)
Definition: yyjson.h:5798
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_get_first(yyjson_mut_val *arr)
Definition: yyjson.h:5812

Macro for iterating over an array. It works like iterator, but with a more intuitive API.

Warning
You should not modify the array while iterating over it.
Example
size_t idx, max;
yyjson_mut_arr_foreach(arr, idx, max, val) {
your_func(idx, val);
}
#define yyjson_mut_arr_foreach(arr, idx, max, val)
Definition: yyjson.h:2560

◆ yyjson_mut_obj_foreach

#define yyjson_mut_obj_foreach (   obj,
  idx,
  max,
  key,
  val 
)
Value:
for ((idx) = 0, \
(max) = yyjson_mut_obj_size(obj), \
(key) = (max) ? ((yyjson_mut_val *)(obj)->uni.ptr)->next->next : NULL, \
(val) = (key) ? (key)->next : NULL; \
(idx) < (max); \
(idx)++, \
(key) = (val)->next, \
(val) = (key)->next)
yyjson_api_inline size_t yyjson_mut_obj_size(yyjson_mut_val *obj)
Definition: yyjson.h:6441

Macro for iterating over an object. It works like iterator, but with a more intuitive API.

Warning
You should not modify the object while iterating over it.
Example
size_t idx, max;
yyjson_val *key, *val;
yyjson_obj_foreach(obj, idx, max, key, val) {
your_func(key, val);
}
#define yyjson_obj_foreach(obj, idx, max, key, val)
Definition: yyjson.h:2037

◆ yyjson_noinline

#define yyjson_noinline

noinline for compiler

◆ yyjson_obj_foreach

#define yyjson_obj_foreach (   obj,
  idx,
  max,
  key,
  val 
)
Value:
for ((idx) = 0, \
(max) = yyjson_obj_size(obj), \
(key) = (obj) ? unsafe_yyjson_get_first(obj) : NULL, \
(val) = (key) + 1; \
(idx) < (max); \
(idx)++, \
(key) = unsafe_yyjson_get_next(val), \
(val) = (key) + 1)
yyjson_api_inline size_t yyjson_obj_size(yyjson_val *obj)
Definition: yyjson.h:5152

Macro for iterating over an object. It works like iterator, but with a more intuitive API.

Example
size_t idx, max;
yyjson_val *key, *val;
yyjson_obj_foreach(obj, idx, max, key, val) {
your_func(key, val);
}

◆ YYJSON_PADDING_SIZE

#define YYJSON_PADDING_SIZE   4

Padding size for JSON reader.

◆ YYJSON_RESERVED_BIT

#define YYJSON_RESERVED_BIT   ((uint8_t)3)

The number of reserved bits.

◆ YYJSON_RESERVED_MASK

#define YYJSON_RESERVED_MASK   ((uint8_t)0xE0) /* 111_____ */

The mask used to extract the reserved bits of a JSON value.

◆ YYJSON_STDC_VER

#define YYJSON_STDC_VER   0

C version (STDC)

◆ YYJSON_SUBTYPE_BIT

#define YYJSON_SUBTYPE_BIT   ((uint8_t)2)

The number of bits used by the subtype.

◆ YYJSON_SUBTYPE_FALSE

#define YYJSON_SUBTYPE_FALSE   ((uint8_t)(0 << 3)) /* ___00___ */

False subtype: false literal.

◆ YYJSON_SUBTYPE_MASK

#define YYJSON_SUBTYPE_MASK   ((uint8_t)0x18) /* ___11___ */

The mask used to extract the subtype of a JSON value.

◆ YYJSON_SUBTYPE_NOESC

#define YYJSON_SUBTYPE_NOESC   ((uint8_t)(1 << 3)) /* ___01___ */

String that do not need to be escaped for writing (internal use).

◆ YYJSON_SUBTYPE_NONE

#define YYJSON_SUBTYPE_NONE   ((uint8_t)(0 << 3)) /* ___00___ */

No subtype.

◆ YYJSON_SUBTYPE_REAL

#define YYJSON_SUBTYPE_REAL   ((uint8_t)(2 << 3)) /* ___10___ */

Real number subtype: double.

◆ YYJSON_SUBTYPE_SINT

#define YYJSON_SUBTYPE_SINT   ((uint8_t)(1 << 3)) /* ___01___ */

Signed integer subtype: int64_t.

◆ YYJSON_SUBTYPE_TRUE

#define YYJSON_SUBTYPE_TRUE   ((uint8_t)(1 << 3)) /* ___01___ */

True subtype: true literal.

◆ YYJSON_SUBTYPE_UINT

#define YYJSON_SUBTYPE_UINT   ((uint8_t)(0 << 3)) /* ___00___ */

Unsigned integer subtype: uint64_t.

◆ YYJSON_TAG_BIT

#define YYJSON_TAG_BIT   ((uint8_t)8)

The number of bits used by the tag.

◆ YYJSON_TAG_MASK

#define YYJSON_TAG_MASK   ((uint8_t)0xFF) /* 11111111 */

The mask used to extract the tag of a JSON value.

◆ YYJSON_TYPE_ARR

#define YYJSON_TYPE_ARR   ((uint8_t)6) /* _____110 */

Array type, no subtype.

◆ YYJSON_TYPE_BIT

#define YYJSON_TYPE_BIT   ((uint8_t)3)

The number of bits used by the type.

◆ YYJSON_TYPE_BOOL

#define YYJSON_TYPE_BOOL   ((uint8_t)3) /* _____011 */

Boolean type, subtype: TRUE, FALSE.

◆ YYJSON_TYPE_MASK

#define YYJSON_TYPE_MASK   ((uint8_t)0x07) /* _____111 */

The mask used to extract the type of a JSON value.

◆ YYJSON_TYPE_NONE

#define YYJSON_TYPE_NONE   ((uint8_t)0) /* _____000 */

No type, invalid.

◆ YYJSON_TYPE_NULL

#define YYJSON_TYPE_NULL   ((uint8_t)2) /* _____010 */

Null type: null literal, no subtype.

◆ YYJSON_TYPE_NUM

#define YYJSON_TYPE_NUM   ((uint8_t)4) /* _____100 */

Number type, subtype: UINT, SINT, REAL.

◆ YYJSON_TYPE_OBJ

#define YYJSON_TYPE_OBJ   ((uint8_t)7) /* _____111 */

Object type, no subtype.

◆ YYJSON_TYPE_RAW

#define YYJSON_TYPE_RAW   ((uint8_t)1) /* _____001 */

Raw string type, no subtype.

◆ YYJSON_TYPE_STR

#define YYJSON_TYPE_STR   ((uint8_t)5) /* _____101 */

String type, subtype: NONE, NOESC.

◆ YYJSON_U64_TO_F64_NO_IMPL

#define YYJSON_U64_TO_F64_NO_IMPL   0

char bit check Microsoft Visual C++ 6.0 doesn't support converting number from u64 to f64: error C2520: conversion from unsigned __int64 to double not implemented.

◆ yyjson_unlikely

#define yyjson_unlikely (   expr)    (expr)

unlikely for compiler

◆ YYJSON_VERSION_HEX

#define YYJSON_VERSION_HEX   0x000900

The version of yyjson in hex: (major << 16) | (minor << 8) | (patch).

◆ YYJSON_VERSION_MAJOR

#define YYJSON_VERSION_MAJOR   0

The major version of yyjson.

◆ YYJSON_VERSION_MINOR

#define YYJSON_VERSION_MINOR   9

The minor version of yyjson.

◆ YYJSON_VERSION_PATCH

#define YYJSON_VERSION_PATCH   0

The patch version of yyjson.

◆ YYJSON_VERSION_STRING

#define YYJSON_VERSION_STRING   "0.9.0"

The version string of yyjson.

Typedef Documentation

◆ yyjson_patch_code

typedef uint32_t yyjson_patch_code

Result code for JSON patch.

◆ yyjson_ptr_code

typedef uint32_t yyjson_ptr_code

JSON Pointer error code.

◆ yyjson_read_code

typedef uint32_t yyjson_read_code

Result code for JSON reader.

◆ yyjson_read_flag

typedef uint32_t yyjson_read_flag

Run-time options for JSON reader.

◆ yyjson_subtype

typedef uint8_t yyjson_subtype

Subtype of a JSON value (2 bit).

◆ yyjson_type

typedef uint8_t yyjson_type

Type of a JSON value (3 bit).

◆ yyjson_write_code

typedef uint32_t yyjson_write_code

Result code for JSON writer

◆ yyjson_write_flag

typedef uint32_t yyjson_write_flag

Run-time options for JSON writer.

Function Documentation

◆ yyjson_alc_dyn_free()

yyjson_api void yyjson_alc_dyn_free ( yyjson_alc alc)

Free a dynamic allocator which is created by yyjson_alc_dyn_new().

Parameters
alcThe dynamic allocator to be destroyed.

◆ yyjson_alc_dyn_new()

yyjson_api yyjson_alc * yyjson_alc_dyn_new ( void  )

A dynamic allocator.

This allocator has a similar usage to the pool allocator above. However, when there is not enough memory, this allocator will dynamically request more memory using libc's malloc function, and frees it all at once when it is destroyed.

Returns
A new dynamic allocator, or NULL if memory allocation failed.
Note
The returned value should be freed with yyjson_alc_dyn_free().
Warning
This Allocator is not thread-safe.

◆ yyjson_alc_pool_init()

yyjson_api bool yyjson_alc_pool_init ( yyjson_alc alc,
void *  buf,
size_t  size 
)

A pool allocator uses fixed length pre-allocated memory.

This allocator may be used to avoid malloc/realloc calls. The pre-allocated memory should be held by the caller. The maximum amount of memory required to read a JSON can be calculated using the yyjson_read_max_memory_usage() function, but the amount of memory required to write a JSON cannot be directly calculated.

This is not a general-purpose allocator. It is designed to handle a single JSON data at a time. If it is used for overly complex memory tasks, such as parsing multiple JSON documents using the same allocator but releasing only a few of them, it may cause memory fragmentation, resulting in performance degradation and memory waste.

Parameters
alcThe allocator to be initialized. If this parameter is NULL, the function will fail and return false. If buf or size is invalid, this will be set to an empty allocator.
bufThe buffer memory for this allocator. If this parameter is NULL, the function will fail and return false.
sizeThe size of buf, in bytes. If this parameter is less than 8 words (32/64 bytes on 32/64-bit OS), the function will fail and return false.
Returns
true if the alc has been successfully initialized.
Example
// parse JSON with stack memory
char buf[1024];
yyjson_alc_pool_init(&alc, buf, 1024);
const char *json = "{\"name\":\"Helvetica\",\"size\":16}"
yyjson_doc *doc = yyjson_read_opts(json, strlen(json), 0, &alc, NULL);
// the memory of `doc` is on the stack
Definition: yyjson.h:618
yyjson_api bool yyjson_alc_pool_init(yyjson_alc *alc, void *buf, size_t size)
yyjson_api yyjson_doc * yyjson_read_opts(char *dat, size_t len, yyjson_read_flag flg, const yyjson_alc *alc, yyjson_read_err *err)
Definition: yyjson.h:4501
Warning
This Allocator is not thread-safe.

◆ yyjson_arr_get()

yyjson_api_inline yyjson_val * yyjson_arr_get ( yyjson_val arr,
size_t  idx 
)

Returns the element at the specified position in this array. Returns NULL if array is NULL/empty or the index is out of bounds.

Warning
This function takes a linear search time if array is not flat. For example: [1,{},3] is flat, [1,[2],3] is not flat.

◆ yyjson_arr_get_first()

yyjson_api_inline yyjson_val * yyjson_arr_get_first ( yyjson_val arr)

Returns the first element of this array. Returns NULL if arr is NULL/empty or type is not array.

◆ yyjson_arr_get_last()

yyjson_api_inline yyjson_val * yyjson_arr_get_last ( yyjson_val arr)

Returns the last element of this array. Returns NULL if arr is NULL/empty or type is not array.

Warning
This function takes a linear search time if array is not flat. For example: [1,{},3] is flat, [1,[2],3] is not flat.

◆ yyjson_arr_iter_has_next()

yyjson_api_inline bool yyjson_arr_iter_has_next ( yyjson_arr_iter iter)

Returns whether the iteration has more elements. If iter is NULL, this function will return false.

◆ yyjson_arr_iter_init()

yyjson_api_inline bool yyjson_arr_iter_init ( yyjson_val arr,
yyjson_arr_iter iter 
)

Initialize an iterator for this array.

Parameters
arrThe array to be iterated over. If this parameter is NULL or not an array, iter will be set to empty.
iterThe iterator to be initialized. If this parameter is NULL, the function will fail and return false.
Returns
true if the iter has been successfully initialized.
Note
The iterator does not need to be destroyed.

◆ yyjson_arr_iter_next()

yyjson_api_inline yyjson_val * yyjson_arr_iter_next ( yyjson_arr_iter iter)

Returns the next element in the iteration, or NULL on end. If iter is NULL, this function will return NULL.

◆ yyjson_arr_iter_with()

yyjson_api_inline yyjson_arr_iter yyjson_arr_iter_with ( yyjson_val arr)

Create an iterator with an array , same as yyjson_arr_iter_init().

Parameters
arrThe array to be iterated over. If this parameter is NULL or not an array, an empty iterator will returned.
Returns
A new iterator for the array.
Note
The iterator does not need to be destroyed.

◆ yyjson_arr_size()

yyjson_api_inline size_t yyjson_arr_size ( yyjson_val arr)

Returns the number of elements in this array. Returns 0 if arr is NULL or type is not array.

◆ yyjson_deprecated() [1/10]

yyjson_deprecated ( "renamed to unsafe_yyjson_mut_ptr_getx"  )
Deprecated:
renamed to unsafe_yyjson_mut_ptr_getx

◆ yyjson_deprecated() [2/10]

yyjson_deprecated ( "renamed to unsafe_yyjson_ptr_getn"  )
Deprecated:
renamed to yyjson_mut_ptr_getn

◆ yyjson_deprecated() [3/10]

yyjson_deprecated ( "renamed to yyjson_doc_ptr_get )
Deprecated:
renamed to yyjson_doc_ptr_get

◆ yyjson_deprecated() [4/10]

yyjson_deprecated ( "renamed to yyjson_doc_ptr_getn )
Deprecated:
renamed to yyjson_doc_ptr_getn

◆ yyjson_deprecated() [5/10]

yyjson_deprecated ( "renamed to yyjson_mut_doc_ptr_get )
Deprecated:
renamed to yyjson_mut_doc_ptr_get

◆ yyjson_deprecated() [6/10]

yyjson_deprecated ( "renamed to yyjson_mut_doc_ptr_getn )
Deprecated:
renamed to yyjson_mut_doc_ptr_getn

◆ yyjson_deprecated() [7/10]

yyjson_deprecated ( "renamed to yyjson_mut_ptr_get )
Deprecated:
renamed to yyjson_mut_ptr_get

◆ yyjson_deprecated() [8/10]

yyjson_deprecated ( "renamed to yyjson_mut_ptr_getn )
Deprecated:
renamed to yyjson_mut_ptr_getn

◆ yyjson_deprecated() [9/10]

yyjson_deprecated ( "renamed to yyjson_ptr_get )
Deprecated:
renamed to yyjson_ptr_get

◆ yyjson_deprecated() [10/10]

yyjson_deprecated ( "renamed to yyjson_ptr_getn )
Deprecated:
renamed to yyjson_ptr_getn

◆ yyjson_doc_free()

yyjson_api_inline void yyjson_doc_free ( yyjson_doc doc)

Release the JSON document and free the memory. After calling this function, the doc and all values from the doc are no longer available. This function will do nothing if the doc is NULL.

◆ yyjson_doc_get_read_size()

yyjson_api_inline size_t yyjson_doc_get_read_size ( yyjson_doc doc)

Returns read size of input JSON data. Returns 0 if doc is NULL. For example: the read size of [1,2,3] is 7 bytes.

◆ yyjson_doc_get_root()

yyjson_api_inline yyjson_val * yyjson_doc_get_root ( yyjson_doc doc)

Returns the root value of this JSON document. Returns NULL if doc is NULL.

◆ yyjson_doc_get_val_count()

yyjson_api_inline size_t yyjson_doc_get_val_count ( yyjson_doc doc)

Returns total value count in this JSON document. Returns 0 if doc is NULL. For example: the value count of [1,2,3] is 4.

◆ yyjson_doc_mut_copy()

yyjson_api yyjson_mut_doc * yyjson_doc_mut_copy ( yyjson_doc doc,
const yyjson_alc alc 
)

Copies and returns a new mutable document from input, returns NULL on error. This makes a deep-copy on the immutable document. If allocator is NULL, the default allocator will be used.

Note
imut_doc -> mut_doc.

◆ yyjson_doc_ptr_get()

yyjson_api_inline yyjson_val * yyjson_doc_ptr_get ( yyjson_doc doc,
const char *  ptr 
)

Get value by a JSON Pointer.

Parameters
docThe JSON document to be queried.
ptrThe JSON pointer string (UTF-8 with null-terminator).
Returns
The value referenced by the JSON pointer. NULL if doc or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_doc_ptr_getn()

yyjson_api_inline yyjson_val * yyjson_doc_ptr_getn ( yyjson_doc doc,
const char *  ptr,
size_t  len 
)

Get value by a JSON Pointer.

Parameters
docThe JSON document to be queried.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
Returns
The value referenced by the JSON pointer. NULL if doc or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_doc_ptr_getx()

yyjson_api_inline yyjson_val * yyjson_doc_ptr_getx ( yyjson_doc doc,
const char *  ptr,
size_t  len,
yyjson_ptr_err err 
)

Get value by a JSON Pointer.

Parameters
docThe JSON document to be queried.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
errA pointer to store the error information, or NULL if not needed.
Returns
The value referenced by the JSON pointer. NULL if doc or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_equals()

yyjson_api_inline bool yyjson_equals ( yyjson_val lhs,
yyjson_val rhs 
)

Returns whether two JSON values are equal (deep compare). Returns false if input is NULL.

Note
the result may be inaccurate if object has duplicate keys.
Warning
This function is recursive and may cause a stack overflow if the object level is too deep.

◆ yyjson_equals_str()

yyjson_api_inline bool yyjson_equals_str ( yyjson_val val,
const char *  str 
)

Returns whether the JSON value is equals to a string. Returns false if input is NULL or type is not string.

◆ yyjson_equals_strn()

yyjson_api_inline bool yyjson_equals_strn ( yyjson_val val,
const char *  str,
size_t  len 
)

Returns whether the JSON value is equals to a string. The str should be a UTF-8 string, null-terminator is not required. Returns false if input is NULL or type is not string.

◆ yyjson_get_bool()

yyjson_api_inline bool yyjson_get_bool ( yyjson_val val)

Returns the content if the value is bool. Returns NULL if val is NULL or type is not bool.

◆ yyjson_get_int()

yyjson_api_inline int yyjson_get_int ( yyjson_val val)

Returns the content and cast to int. Returns 0 if val is NULL or type is not integer(sint/uint).

◆ yyjson_get_len()

yyjson_api_inline size_t yyjson_get_len ( yyjson_val val)

Returns the content length (string length, array size, object size. Returns 0 if val is NULL or type is not string/array/object.

◆ yyjson_get_num()

yyjson_api_inline double yyjson_get_num ( yyjson_val val)

Returns the content and typecast to double if the value is number. Returns 0.0 if val is NULL or type is not number(uint/sint/real).

◆ yyjson_get_raw()

yyjson_api_inline const char * yyjson_get_raw ( yyjson_val val)

Returns the content if the value is raw. Returns NULL if val is NULL or type is not raw.

◆ yyjson_get_real()

yyjson_api_inline double yyjson_get_real ( yyjson_val val)

Returns the content if the value is real number, or 0.0 on error. Returns 0.0 if val is NULL or type is not real(double).

◆ yyjson_get_sint()

yyjson_api_inline int64_t yyjson_get_sint ( yyjson_val val)

Returns the content and cast to int64_t. Returns 0 if val is NULL or type is not integer(sint/uint).

◆ yyjson_get_str()

yyjson_api_inline const char * yyjson_get_str ( yyjson_val val)

Returns the content if the value is string. Returns NULL if val is NULL or type is not string.

◆ yyjson_get_subtype()

yyjson_api_inline yyjson_subtype yyjson_get_subtype ( yyjson_val val)

Returns the JSON value's subtype. Returns YYJSON_SUBTYPE_NONE if val is NULL.

◆ yyjson_get_tag()

yyjson_api_inline uint8_t yyjson_get_tag ( yyjson_val val)

Returns the JSON value's tag. Returns 0 if val is NULL.

◆ yyjson_get_type()

yyjson_api_inline yyjson_type yyjson_get_type ( yyjson_val val)

Returns the JSON value's type. Returns YYJSON_TYPE_NONE if val is NULL.

◆ yyjson_get_type_desc()

yyjson_api_inline const char * yyjson_get_type_desc ( yyjson_val val)

Returns the JSON value's type description. The return value should be one of these strings: "raw", "null", "string", "array", "object", "true", "false", "uint", "sint", "real", "unknown".

◆ yyjson_get_uint()

yyjson_api_inline uint64_t yyjson_get_uint ( yyjson_val val)

Returns the content and cast to uint64_t. Returns 0 if val is NULL or type is not integer(sint/uint).

◆ yyjson_is_arr()

yyjson_api_inline bool yyjson_is_arr ( yyjson_val val)

Returns whether the JSON value is array. Returns false if val is NULL.

◆ yyjson_is_bool()

yyjson_api_inline bool yyjson_is_bool ( yyjson_val val)

Returns whether the JSON value is bool (true/false). Returns false if val is NULL.

◆ yyjson_is_ctn()

yyjson_api_inline bool yyjson_is_ctn ( yyjson_val val)

Returns whether the JSON value is container (array/object). Returns false if val is NULL.

◆ yyjson_is_false()

yyjson_api_inline bool yyjson_is_false ( yyjson_val val)

Returns whether the JSON value is false. Returns false if val is NULL.

◆ yyjson_is_int()

yyjson_api_inline bool yyjson_is_int ( yyjson_val val)

Returns whether the JSON value is integer (uint64_t/int64_t). Returns false if val is NULL.

◆ yyjson_is_null()

yyjson_api_inline bool yyjson_is_null ( yyjson_val val)

Returns whether the JSON value is null. Returns false if val is NULL.

◆ yyjson_is_num()

yyjson_api_inline bool yyjson_is_num ( yyjson_val val)

Returns whether the JSON value is number (uint64_t/int64_t/double). Returns false if val is NULL.

◆ yyjson_is_obj()

yyjson_api_inline bool yyjson_is_obj ( yyjson_val val)

Returns whether the JSON value is object. Returns false if val is NULL.

◆ yyjson_is_raw()

yyjson_api_inline bool yyjson_is_raw ( yyjson_val val)

Returns whether the JSON value is raw. Returns false if val is NULL.

◆ yyjson_is_real()

yyjson_api_inline bool yyjson_is_real ( yyjson_val val)

Returns whether the JSON value is real number (double). Returns false if val is NULL.

◆ yyjson_is_sint()

yyjson_api_inline bool yyjson_is_sint ( yyjson_val val)

Returns whether the JSON value is signed integer (int64_t). Returns false if val is NULL.

◆ yyjson_is_str()

yyjson_api_inline bool yyjson_is_str ( yyjson_val val)

Returns whether the JSON value is string. Returns false if val is NULL.

◆ yyjson_is_true()

yyjson_api_inline bool yyjson_is_true ( yyjson_val val)

Returns whether the JSON value is true. Returns false if val is NULL.

◆ yyjson_is_uint()

yyjson_api_inline bool yyjson_is_uint ( yyjson_val val)

Returns whether the JSON value is unsigned integer (uint64_t). Returns false if val is NULL.

◆ yyjson_merge_patch()

yyjson_api yyjson_mut_val * yyjson_merge_patch ( yyjson_mut_doc doc,
yyjson_val orig,
yyjson_val patch 
)

Creates and returns a merge-patched JSON value (RFC 7386). The memory of the returned value is allocated by the doc. Returns NULL if the patch could not be applied.

Warning
This function is recursive and may cause a stack overflow if the object level is too deep.

◆ yyjson_mut_arr()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr ( yyjson_mut_doc doc)

Creates and returns an empty mutable array.

Parameters
docA mutable document, used for memory allocation only.
Returns
The new array. NULL if input is NULL or memory allocation failed.

◆ yyjson_mut_arr_add_arr()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_add_arr ( yyjson_mut_doc doc,
yyjson_mut_val arr 
)

Creates and adds a new array at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
Returns
The new array, or NULL on error.

◆ yyjson_mut_arr_add_bool()

yyjson_api_inline bool yyjson_mut_arr_add_bool ( yyjson_mut_doc doc,
yyjson_mut_val arr,
bool  val 
)

Adds a bool value at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
valThe bool value to be added.
Returns
Whether successful.

◆ yyjson_mut_arr_add_false()

yyjson_api_inline bool yyjson_mut_arr_add_false ( yyjson_mut_doc doc,
yyjson_mut_val arr 
)

Adds a false value at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
Returns
Whether successful.

◆ yyjson_mut_arr_add_int()

yyjson_api_inline bool yyjson_mut_arr_add_int ( yyjson_mut_doc doc,
yyjson_mut_val arr,
int64_t  num 
)

Adds a integer value at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
numThe number to be added.
Returns
Whether successful.

◆ yyjson_mut_arr_add_null()

yyjson_api_inline bool yyjson_mut_arr_add_null ( yyjson_mut_doc doc,
yyjson_mut_val arr 
)

Adds a null value at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
Returns
Whether successful.

◆ yyjson_mut_arr_add_obj()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_add_obj ( yyjson_mut_doc doc,
yyjson_mut_val arr 
)

Creates and adds a new object at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
Returns
The new object, or NULL on error.

◆ yyjson_mut_arr_add_real()

yyjson_api_inline bool yyjson_mut_arr_add_real ( yyjson_mut_doc doc,
yyjson_mut_val arr,
double  num 
)

Adds a double value at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
numThe number to be added.
Returns
Whether successful.

◆ yyjson_mut_arr_add_sint()

yyjson_api_inline bool yyjson_mut_arr_add_sint ( yyjson_mut_doc doc,
yyjson_mut_val arr,
int64_t  num 
)

Adds a signed integer value at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
numThe number to be added.
Returns
Whether successful.

◆ yyjson_mut_arr_add_str()

yyjson_api_inline bool yyjson_mut_arr_add_str ( yyjson_mut_doc doc,
yyjson_mut_val arr,
const char *  str 
)

Adds a string value at the end of the array (no copy).

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
strA null-terminated UTF-8 string.
Returns
Whether successful.
Warning
The input string is not copied, you should keep this string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_arr_add_strcpy()

yyjson_api_inline bool yyjson_mut_arr_add_strcpy ( yyjson_mut_doc doc,
yyjson_mut_val arr,
const char *  str 
)

Adds a string value at the end of the array (copied).

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
strA null-terminated UTF-8 string.
Returns
Whether successful.

◆ yyjson_mut_arr_add_strn()

yyjson_api_inline bool yyjson_mut_arr_add_strn ( yyjson_mut_doc doc,
yyjson_mut_val arr,
const char *  str,
size_t  len 
)

Adds a string value at the end of the array (no copy).

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
strA UTF-8 string, null-terminator is not required.
lenThe length of the string, in bytes.
Returns
Whether successful.
Warning
The input string is not copied, you should keep this string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_arr_add_strncpy()

yyjson_api_inline bool yyjson_mut_arr_add_strncpy ( yyjson_mut_doc doc,
yyjson_mut_val arr,
const char *  str,
size_t  len 
)

Adds a string value at the end of the array (copied).

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
strA UTF-8 string, null-terminator is not required.
lenThe length of the string, in bytes.
Returns
Whether successful.

◆ yyjson_mut_arr_add_true()

yyjson_api_inline bool yyjson_mut_arr_add_true ( yyjson_mut_doc doc,
yyjson_mut_val arr 
)

Adds a true value at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
Returns
Whether successful.

◆ yyjson_mut_arr_add_uint()

yyjson_api_inline bool yyjson_mut_arr_add_uint ( yyjson_mut_doc doc,
yyjson_mut_val arr,
uint64_t  num 
)

Adds an unsigned integer value at the end of the array.

Parameters
docThe doc is only used for memory allocation.
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
numThe number to be added.
Returns
Whether successful.

◆ yyjson_mut_arr_add_val()

yyjson_api_inline bool yyjson_mut_arr_add_val ( yyjson_mut_val arr,
yyjson_mut_val val 
)

Adds a value at the end of the array.

Parameters
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
valThe value to be inserted. Returns false if it is NULL.
Returns
Whether successful.

◆ yyjson_mut_arr_append()

yyjson_api_inline bool yyjson_mut_arr_append ( yyjson_mut_val arr,
yyjson_mut_val val 
)

Inserts a value at the end of the array.

Parameters
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
valThe value to be inserted. Returns false if it is NULL.
Returns
Whether successful.

◆ yyjson_mut_arr_clear()

yyjson_api_inline bool yyjson_mut_arr_clear ( yyjson_mut_val arr)

Removes all values in this array.

Parameters
arrThe array from which all of the values are to be removed. Returns false if it is NULL or not an array.
Returns
Whether successful.

◆ yyjson_mut_arr_get()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_get ( yyjson_mut_val arr,
size_t  idx 
)

Returns the element at the specified position in this array. Returns NULL if array is NULL/empty or the index is out of bounds.

Warning
This function takes a linear search time.

◆ yyjson_mut_arr_get_first()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_get_first ( yyjson_mut_val arr)

Returns the first element of this array. Returns NULL if arr is NULL/empty or type is not array.

◆ yyjson_mut_arr_get_last()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_get_last ( yyjson_mut_val arr)

Returns the last element of this array. Returns NULL if arr is NULL/empty or type is not array.

◆ yyjson_mut_arr_insert()

yyjson_api_inline bool yyjson_mut_arr_insert ( yyjson_mut_val arr,
yyjson_mut_val val,
size_t  idx 
)

Inserts a value into an array at a given index.

Parameters
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
valThe value to be inserted. Returns false if it is NULL.
idxThe index to which to insert the new value. Returns false if the index is out of range.
Returns
Whether successful.
Warning
This function takes a linear search time.

◆ yyjson_mut_arr_iter_has_next()

yyjson_api_inline bool yyjson_mut_arr_iter_has_next ( yyjson_mut_arr_iter iter)

Returns whether the iteration has more elements. If iter is NULL, this function will return false.

◆ yyjson_mut_arr_iter_init()

yyjson_api_inline bool yyjson_mut_arr_iter_init ( yyjson_mut_val arr,
yyjson_mut_arr_iter iter 
)

Initialize an iterator for this array.

Parameters
arrThe array to be iterated over. If this parameter is NULL or not an array, iter will be set to empty.
iterThe iterator to be initialized. If this parameter is NULL, the function will fail and return false.
Returns
true if the iter has been successfully initialized.
Note
The iterator does not need to be destroyed.

◆ yyjson_mut_arr_iter_next()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_iter_next ( yyjson_mut_arr_iter iter)

Returns the next element in the iteration, or NULL on end. If iter is NULL, this function will return NULL.

◆ yyjson_mut_arr_iter_remove()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_iter_remove ( yyjson_mut_arr_iter iter)

Removes and returns current element in the iteration. If iter is NULL, this function will return NULL.

◆ yyjson_mut_arr_iter_with()

yyjson_api_inline yyjson_mut_arr_iter yyjson_mut_arr_iter_with ( yyjson_mut_val arr)

Create an iterator with an array , same as yyjson_mut_arr_iter_init().

Parameters
arrThe array to be iterated over. If this parameter is NULL or not an array, an empty iterator will returned.
Returns
A new iterator for the array.
Note
The iterator does not need to be destroyed.

◆ yyjson_mut_arr_prepend()

yyjson_api_inline bool yyjson_mut_arr_prepend ( yyjson_mut_val arr,
yyjson_mut_val val 
)

Inserts a value at the head of the array.

Parameters
arrThe array to which the value is to be inserted. Returns false if it is NULL or not an array.
valThe value to be inserted. Returns false if it is NULL.
Returns
Whether successful.

◆ yyjson_mut_arr_remove()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_remove ( yyjson_mut_val arr,
size_t  idx 
)

Removes and returns a value at index.

Parameters
arrThe array from which the value is to be removed. Returns false if it is NULL or not an array.
idxThe index from which to remove the value. Returns false if the index is out of range.
Returns
Old value, or NULL on error.
Warning
This function takes a linear search time.

◆ yyjson_mut_arr_remove_first()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_remove_first ( yyjson_mut_val arr)

Removes and returns the first value in this array.

Parameters
arrThe array from which the value is to be removed. Returns false if it is NULL or not an array.
Returns
The first value, or NULL on error.

◆ yyjson_mut_arr_remove_last()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_remove_last ( yyjson_mut_val arr)

Removes and returns the last value in this array.

Parameters
arrThe array from which the value is to be removed. Returns false if it is NULL or not an array.
Returns
The last value, or NULL on error.

◆ yyjson_mut_arr_remove_range()

yyjson_api_inline bool yyjson_mut_arr_remove_range ( yyjson_mut_val arr,
size_t  idx,
size_t  len 
)

Removes all values within a specified range in the array.

Parameters
arrThe array from which the value is to be removed. Returns false if it is NULL or not an array.
idxThe start index of the range (0 is the first).
lenThe number of items in the range (can be 0).
Returns
Whether successful.
Warning
This function takes a linear search time.

◆ yyjson_mut_arr_replace()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_replace ( yyjson_mut_val arr,
size_t  idx,
yyjson_mut_val val 
)

Replaces a value at index and returns old value.

Parameters
arrThe array to which the value is to be replaced. Returns false if it is NULL or not an array.
idxThe index to which to replace the value. Returns false if the index is out of range.
valThe new value to replace. Returns false if it is NULL.
Returns
Old value, or NULL on error.
Warning
This function takes a linear search time.

◆ yyjson_mut_arr_rotate()

yyjson_api_inline bool yyjson_mut_arr_rotate ( yyjson_mut_val arr,
size_t  idx 
)

Rotates values in this array for the given number of times. For example: [1,2,3,4,5] rotate 2 is [3,4,5,1,2].

Parameters
arrThe array to be rotated.
idxIndex (or times) to rotate.
Warning
This function takes a linear search time.

◆ yyjson_mut_arr_size()

yyjson_api_inline size_t yyjson_mut_arr_size ( yyjson_mut_val arr)

Returns the number of elements in this array. Returns 0 if arr is NULL or type is not array.

◆ yyjson_mut_arr_with_bool()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_bool ( yyjson_mut_doc doc,
const bool *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given boolean values.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of boolean values.
countThe value count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const bool vals[3] = { true, false, true };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_bool(yyjson_mut_doc *doc, const bool *vals, size_t count)
Definition: yyjson.h:5926

◆ yyjson_mut_arr_with_double()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_double ( yyjson_mut_doc doc,
const double *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given double numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of double numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const double vals[3] = { -1.0, 0.0, 1.0 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_double(yyjson_mut_doc *doc, const double *vals, size_t count)
Definition: yyjson.h:6021

◆ yyjson_mut_arr_with_float()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_float ( yyjson_mut_doc doc,
const float *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given float numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of float numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const float vals[3] = { -1.0f, 0.0f, 1.0f };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_float(yyjson_mut_doc *doc, const float *vals, size_t count)
Definition: yyjson.h:6013

◆ yyjson_mut_arr_with_real()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_real ( yyjson_mut_doc doc,
const double *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given real numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of real numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const double vals[3] = { 0.1, 0.2, 0.3 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_real(yyjson_mut_doc *doc, const double *vals, size_t count)
Definition: yyjson.h:5944

◆ yyjson_mut_arr_with_sint()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint ( yyjson_mut_doc doc,
const int64_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given sint numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of sint numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const int64_t vals[3] = { -1, 0, 1 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint64(yyjson_mut_doc *doc, const int64_t *vals, size_t count)
Definition: yyjson.h:5973

◆ yyjson_mut_arr_with_sint16()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint16 ( yyjson_mut_doc doc,
const int16_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given int16 numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of int16 numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const int16_t vals[3] = { -1, 0, 1 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint16(yyjson_mut_doc *doc, const int16_t *vals, size_t count)
Definition: yyjson.h:5957

◆ yyjson_mut_arr_with_sint32()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint32 ( yyjson_mut_doc doc,
const int32_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given int32 numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of int32 numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const int32_t vals[3] = { -1, 0, 1 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint32(yyjson_mut_doc *doc, const int32_t *vals, size_t count)
Definition: yyjson.h:5965

◆ yyjson_mut_arr_with_sint64()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint64 ( yyjson_mut_doc doc,
const int64_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given int64 numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of int64 numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const int64_t vals[3] = { -1, 0, 1 };

◆ yyjson_mut_arr_with_sint8()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint8 ( yyjson_mut_doc doc,
const int8_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given int8 numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of int8 numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const int8_t vals[3] = { -1, 0, 1 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_sint8(yyjson_mut_doc *doc, const int8_t *vals, size_t count)
Definition: yyjson.h:5949

◆ yyjson_mut_arr_with_str()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_str ( yyjson_mut_doc doc,
const char **  vals,
size_t  count 
)

Creates and returns a new mutable array with the given strings, these strings will not be copied.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of UTF-8 null-terminator strings. If this array contains NULL, the function will fail and return NULL.
countThe number of values in vals. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Warning
The input strings are not copied, you should keep these strings unmodified for the lifetime of this JSON document. If these strings will be modified, you should use yyjson_mut_arr_with_strcpy() instead.
Example
const char *vals[3] = { "a", "b", "c" };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_str(yyjson_mut_doc *doc, const char **vals, size_t count)
Definition: yyjson.h:6029

◆ yyjson_mut_arr_with_strcpy()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_strcpy ( yyjson_mut_doc doc,
const char **  vals,
size_t  count 
)

Creates and returns a new mutable array with the given strings, these strings will be copied.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of UTF-8 null-terminator strings. If this array contains NULL, the function will fail and return NULL.
countThe number of values in vals. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const char *vals[3] = { "a", "b", "c" };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_strcpy(yyjson_mut_doc *doc, const char **vals, size_t count)
Definition: yyjson.h:6049

◆ yyjson_mut_arr_with_strn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_strn ( yyjson_mut_doc doc,
const char **  vals,
const size_t *  lens,
size_t  count 
)

Creates and returns a new mutable array with the given strings and string lengths, these strings will not be copied.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of UTF-8 strings, null-terminator is not required. If this array contains NULL, the function will fail and return NULL.
lensA C array of string lengths, in bytes.
countThe number of strings in vals. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Warning
The input strings are not copied, you should keep these strings unmodified for the lifetime of this JSON document. If these strings will be modified, you should use yyjson_mut_arr_with_strncpy() instead.
Example
const char *vals[3] = { "a", "bb", "c" };
const size_t lens[3] = { 1, 2, 1 };
yyjson_mut_val *arr = yyjson_mut_arr_with_strn(doc, vals, lens, 3);
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_strn(yyjson_mut_doc *doc, const char **vals, const size_t *lens, size_t count)
Definition: yyjson.h:6039

◆ yyjson_mut_arr_with_strncpy()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_strncpy ( yyjson_mut_doc doc,
const char **  vals,
const size_t *  lens,
size_t  count 
)

Creates and returns a new mutable array with the given strings and string lengths, these strings will be copied.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of UTF-8 strings, null-terminator is not required. If this array contains NULL, the function will fail and return NULL.
lensA C array of string lengths, in bytes.
countThe number of strings in vals. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const char *vals[3] = { "a", "bb", "c" };
const size_t lens[3] = { 1, 2, 1 };
yyjson_mut_val *arr = yyjson_mut_arr_with_strn(doc, vals, lens, 3);

◆ yyjson_mut_arr_with_uint()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint ( yyjson_mut_doc doc,
const uint64_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given uint numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of uint numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const uint64_t vals[3] = { 0, 1, 0 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint(yyjson_mut_doc *doc, const uint64_t *vals, size_t count)
Definition: yyjson.h:5939

◆ yyjson_mut_arr_with_uint16()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint16 ( yyjson_mut_doc doc,
const uint16_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given uint16 numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of uint16 numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const uint16_t vals[3] = { 0, 1, 0 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint16(yyjson_mut_doc *doc, const uint16_t *vals, size_t count)
Definition: yyjson.h:5989

◆ yyjson_mut_arr_with_uint32()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint32 ( yyjson_mut_doc doc,
const uint32_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given uint32 numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of uint32 numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const uint32_t vals[3] = { 0, 1, 0 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint32(yyjson_mut_doc *doc, const uint32_t *vals, size_t count)
Definition: yyjson.h:5997

◆ yyjson_mut_arr_with_uint64()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint64 ( yyjson_mut_doc doc,
const uint64_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given uint64 numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of uint64 numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const uint64_t vals[3] = { 0, 1, 0 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint64(yyjson_mut_doc *doc, const uint64_t *vals, size_t count)
Definition: yyjson.h:6005

◆ yyjson_mut_arr_with_uint8()

yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint8 ( yyjson_mut_doc doc,
const uint8_t *  vals,
size_t  count 
)

Creates and returns a new mutable array with the given uint8 numbers.

Parameters
docA mutable document, used for memory allocation only. If this parameter is NULL, the function will fail and return NULL.
valsA C array of uint8 numbers.
countThe number count. If this value is 0, an empty array will return.
Returns
The new array. NULL if input is invalid or memory allocation failed.
Example
const uint8_t vals[3] = { 0, 1, 0 };
yyjson_api_inline yyjson_mut_val * yyjson_mut_arr_with_uint8(yyjson_mut_doc *doc, const uint8_t *vals, size_t count)
Definition: yyjson.h:5981

◆ yyjson_mut_bool()

yyjson_api_inline yyjson_mut_val * yyjson_mut_bool ( yyjson_mut_doc doc,
bool  val 
)

Creates and returns a bool value, returns NULL on error.

◆ yyjson_mut_doc_free()

yyjson_api void yyjson_mut_doc_free ( yyjson_mut_doc doc)

Release the JSON document and free the memory. After calling this function, the doc and all values from the doc are no longer available. This function will do nothing if the doc is NULL.

◆ yyjson_mut_doc_get_root()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_get_root ( yyjson_mut_doc doc)

Returns the root value of this JSON document. Returns NULL if doc is NULL.

◆ yyjson_mut_doc_imut_copy()

yyjson_api yyjson_doc * yyjson_mut_doc_imut_copy ( yyjson_mut_doc doc,
const yyjson_alc alc 
)

Copies and returns a new immutable document from input, returns NULL on error. This makes a deep-copy on the mutable document. The returned document should be freed with yyjson_doc_free().

Note
mut_doc -> imut_doc.
Warning
This function is recursive and may cause a stack overflow if the object level is too deep.

◆ yyjson_mut_doc_mut_copy()

yyjson_api yyjson_mut_doc * yyjson_mut_doc_mut_copy ( yyjson_mut_doc doc,
const yyjson_alc alc 
)

Copies and returns a new mutable document from input, returns NULL on error. This makes a deep-copy on the mutable document. If allocator is NULL, the default allocator will be used.

Note
mut_doc -> mut_doc.

◆ yyjson_mut_doc_new()

yyjson_api yyjson_mut_doc * yyjson_mut_doc_new ( const yyjson_alc alc)

Creates and returns a new mutable JSON document, returns NULL on error. If allocator is NULL, the default allocator will be used.

◆ yyjson_mut_doc_ptr_add()

yyjson_api_inline bool yyjson_mut_doc_ptr_add ( yyjson_mut_doc doc,
const char *  ptr,
yyjson_mut_val new_val 
)

Add (insert) value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8 with null-terminator).
new_valThe value to be added.
Returns
true if JSON pointer is valid and new value is added, false otherwise.
Note
The parent nodes will be created if they do not exist.

◆ yyjson_mut_doc_ptr_addn()

yyjson_api_inline bool yyjson_mut_doc_ptr_addn ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val 
)

Add (insert) value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe value to be added.
Returns
true if JSON pointer is valid and new value is added, false otherwise.
Note
The parent nodes will be created if they do not exist.

◆ yyjson_mut_doc_ptr_addx()

yyjson_api_inline bool yyjson_mut_doc_ptr_addx ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val,
bool  create_parent,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Add (insert) value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe value to be added.
create_parentWhether to create parent nodes if not exist.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
true if JSON pointer is valid and new value is added, false otherwise.

◆ yyjson_mut_doc_ptr_get()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_get ( yyjson_mut_doc doc,
const char *  ptr 
)

Get value by a JSON Pointer.

Parameters
docThe JSON document to be queried.
ptrThe JSON pointer string (UTF-8 with null-terminator).
Returns
The value referenced by the JSON pointer. NULL if doc or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_mut_doc_ptr_getn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_getn ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len 
)

Get value by a JSON Pointer.

Parameters
docThe JSON document to be queried.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
Returns
The value referenced by the JSON pointer. NULL if doc or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_mut_doc_ptr_getx()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_getx ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Get value by a JSON Pointer.

Parameters
docThe JSON document to be queried.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
The value referenced by the JSON pointer. NULL if doc or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_mut_doc_ptr_remove()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_remove ( yyjson_mut_doc doc,
const char *  ptr 
)

Remove value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8 with null-terminator).
Returns
The removed value, or NULL on error.

◆ yyjson_mut_doc_ptr_removen()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_removen ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len 
)

Remove value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
Returns
The removed value, or NULL on error.

◆ yyjson_mut_doc_ptr_removex()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_removex ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Remove value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
The removed value, or NULL on error.

◆ yyjson_mut_doc_ptr_replace()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_replace ( yyjson_mut_doc doc,
const char *  ptr,
yyjson_mut_val new_val 
)

Replace value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8 with null-terminator).
new_valThe new value to replace the old one.
Returns
The old value that was replaced, or NULL if not found.

◆ yyjson_mut_doc_ptr_replacen()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_replacen ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val 
)

Replace value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe new value to replace the old one.
Returns
The old value that was replaced, or NULL if not found.

◆ yyjson_mut_doc_ptr_replacex()

yyjson_api_inline yyjson_mut_val * yyjson_mut_doc_ptr_replacex ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Replace value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe new value to replace the old one.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
The old value that was replaced, or NULL if not found.

◆ yyjson_mut_doc_ptr_set()

yyjson_api_inline bool yyjson_mut_doc_ptr_set ( yyjson_mut_doc doc,
const char *  ptr,
yyjson_mut_val new_val 
)

Set value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8 with null-terminator).
new_valThe value to be set, pass NULL to remove.
Returns
true if JSON pointer is valid and new value is set, false otherwise.
Note
The parent nodes will be created if they do not exist. If the target value already exists, it will be replaced by the new value.

◆ yyjson_mut_doc_ptr_setn()

yyjson_api_inline bool yyjson_mut_doc_ptr_setn ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val 
)

Set value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe value to be set, pass NULL to remove.
Returns
true if JSON pointer is valid and new value is set, false otherwise.
Note
The parent nodes will be created if they do not exist. If the target value already exists, it will be replaced by the new value.

◆ yyjson_mut_doc_ptr_setx()

yyjson_api_inline bool yyjson_mut_doc_ptr_setx ( yyjson_mut_doc doc,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val,
bool  create_parent,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Set value by a JSON pointer.

Parameters
docThe target JSON document.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe value to be set, pass NULL to remove.
create_parentWhether to create parent nodes if not exist.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
true if JSON pointer is valid and new value is set, false otherwise.
Note
If the target value already exists, it will be replaced by the new value.

◆ yyjson_mut_doc_set_root()

yyjson_api_inline void yyjson_mut_doc_set_root ( yyjson_mut_doc doc,
yyjson_mut_val root 
)

Sets the root value of this JSON document. Pass NULL to clear root value of the document.

◆ yyjson_mut_doc_set_str_pool_size()

yyjson_api bool yyjson_mut_doc_set_str_pool_size ( yyjson_mut_doc doc,
size_t  len 
)

Set the string pool size for a mutable document. This function does not allocate memory immediately, but uses the size when the next memory allocation is needed.

If the caller knows the approximate bytes of strings that the document needs to store (e.g. copy string with yyjson_mut_strcpy function), setting a larger size can avoid multiple memory allocations and improve performance.

Parameters
docThe mutable document.
lenThe desired string pool size in bytes (total string length).
Returns
true if successful, false if size is 0 or overflow.

◆ yyjson_mut_doc_set_val_pool_size()

yyjson_api bool yyjson_mut_doc_set_val_pool_size ( yyjson_mut_doc doc,
size_t  count 
)

Set the value pool size for a mutable document. This function does not allocate memory immediately, but uses the size when the next memory allocation is needed.

If the caller knows the approximate number of values that the document needs to store (e.g. create new value with yyjson_mut_xxx functions), setting a larger size can avoid multiple memory allocations and improve performance.

Parameters
docThe mutable document.
countThe desired value pool size (number of yyjson_mut_val).
Returns
true if successful, false if size is 0 or overflow.

◆ yyjson_mut_equals()

yyjson_api_inline bool yyjson_mut_equals ( yyjson_mut_val lhs,
yyjson_mut_val rhs 
)

Returns whether two JSON values are equal (deep compare). Returns false if input is NULL.

Note
the result may be inaccurate if object has duplicate keys.
Warning
This function is recursive and may cause a stack overflow if the object level is too deep.

◆ yyjson_mut_equals_str()

yyjson_api_inline bool yyjson_mut_equals_str ( yyjson_mut_val val,
const char *  str 
)

Returns whether the JSON value is equals to a string. The str should be a null-terminated UTF-8 string. Returns false if input is NULL or type is not string.

◆ yyjson_mut_equals_strn()

yyjson_api_inline bool yyjson_mut_equals_strn ( yyjson_mut_val val,
const char *  str,
size_t  len 
)

Returns whether the JSON value is equals to a string. The str should be a UTF-8 string, null-terminator is not required. Returns false if input is NULL or type is not string.

◆ yyjson_mut_false()

yyjson_api_inline yyjson_mut_val * yyjson_mut_false ( yyjson_mut_doc doc)

Creates and returns a false value, returns NULL on error.

◆ yyjson_mut_get_bool()

yyjson_api_inline bool yyjson_mut_get_bool ( yyjson_mut_val val)

Returns the content if the value is bool. Returns NULL if val is NULL or type is not bool.

◆ yyjson_mut_get_int()

yyjson_api_inline int yyjson_mut_get_int ( yyjson_mut_val val)

Returns the content and cast to int. Returns 0 if val is NULL or type is not integer(sint/uint).

◆ yyjson_mut_get_len()

yyjson_api_inline size_t yyjson_mut_get_len ( yyjson_mut_val val)

Returns the content length (string length, array size, object size. Returns 0 if val is NULL or type is not string/array/object.

◆ yyjson_mut_get_num()

yyjson_api_inline double yyjson_mut_get_num ( yyjson_mut_val val)

Returns the content and typecast to double if the value is number. Returns 0.0 if val is NULL or type is not number(uint/sint/real).

◆ yyjson_mut_get_raw()

yyjson_api_inline const char * yyjson_mut_get_raw ( yyjson_mut_val val)

Returns the content if the value is raw. Returns NULL if val is NULL or type is not raw.

◆ yyjson_mut_get_real()

yyjson_api_inline double yyjson_mut_get_real ( yyjson_mut_val val)

Returns the content if the value is real number. Returns 0.0 if val is NULL or type is not real(double).

◆ yyjson_mut_get_sint()

yyjson_api_inline int64_t yyjson_mut_get_sint ( yyjson_mut_val val)

Returns the content and cast to int64_t. Returns 0 if val is NULL or type is not integer(sint/uint).

◆ yyjson_mut_get_str()

yyjson_api_inline const char * yyjson_mut_get_str ( yyjson_mut_val val)

Returns the content if the value is string. Returns NULL if val is NULL or type is not string.

◆ yyjson_mut_get_subtype()

yyjson_api_inline yyjson_subtype yyjson_mut_get_subtype ( yyjson_mut_val val)

Returns the JSON value's subtype. Returns YYJSON_SUBTYPE_NONE if val is NULL.

◆ yyjson_mut_get_tag()

yyjson_api_inline uint8_t yyjson_mut_get_tag ( yyjson_mut_val val)

Returns the JSON value's tag. Returns 0 if val is NULL.

◆ yyjson_mut_get_type()

yyjson_api_inline yyjson_type yyjson_mut_get_type ( yyjson_mut_val val)

Returns the JSON value's type. Returns YYJSON_TYPE_NONE if val is NULL.

◆ yyjson_mut_get_type_desc()

yyjson_api_inline const char * yyjson_mut_get_type_desc ( yyjson_mut_val val)

Returns the JSON value's type description. The return value should be one of these strings: "raw", "null", "string", "array", "object", "true", "false", "uint", "sint", "real", "unknown".

◆ yyjson_mut_get_uint()

yyjson_api_inline uint64_t yyjson_mut_get_uint ( yyjson_mut_val val)

Returns the content and cast to uint64_t. Returns 0 if val is NULL or type is not integer(sint/uint).

◆ yyjson_mut_int()

yyjson_api_inline yyjson_mut_val * yyjson_mut_int ( yyjson_mut_doc doc,
int64_t  num 
)

Creates and returns a signed integer value, returns NULL on error.

◆ yyjson_mut_is_arr()

yyjson_api_inline bool yyjson_mut_is_arr ( yyjson_mut_val val)

Returns whether the JSON value is array. Returns false if val is NULL.

◆ yyjson_mut_is_bool()

yyjson_api_inline bool yyjson_mut_is_bool ( yyjson_mut_val val)

Returns whether the JSON value is bool (true/false). Returns false if val is NULL.

◆ yyjson_mut_is_ctn()

yyjson_api_inline bool yyjson_mut_is_ctn ( yyjson_mut_val val)

Returns whether the JSON value is container (array/object). Returns false if val is NULL.

◆ yyjson_mut_is_false()

yyjson_api_inline bool yyjson_mut_is_false ( yyjson_mut_val val)

Returns whether the JSON value is false. Returns false if val is NULL.

◆ yyjson_mut_is_int()

yyjson_api_inline bool yyjson_mut_is_int ( yyjson_mut_val val)

Returns whether the JSON value is integer (uint64_t/int64_t). Returns false if val is NULL.

◆ yyjson_mut_is_null()

yyjson_api_inline bool yyjson_mut_is_null ( yyjson_mut_val val)

Returns whether the JSON value is null. Returns false if val is NULL.

◆ yyjson_mut_is_num()

yyjson_api_inline bool yyjson_mut_is_num ( yyjson_mut_val val)

Returns whether the JSON value is number (uint/sint/real). Returns false if val is NULL.

◆ yyjson_mut_is_obj()

yyjson_api_inline bool yyjson_mut_is_obj ( yyjson_mut_val val)

Returns whether the JSON value is object. Returns false if val is NULL.

◆ yyjson_mut_is_raw()

yyjson_api_inline bool yyjson_mut_is_raw ( yyjson_mut_val val)

Returns whether the JSON value is raw. Returns false if val is NULL.

◆ yyjson_mut_is_real()

yyjson_api_inline bool yyjson_mut_is_real ( yyjson_mut_val val)

Returns whether the JSON value is real number (double). Returns false if val is NULL.

◆ yyjson_mut_is_sint()

yyjson_api_inline bool yyjson_mut_is_sint ( yyjson_mut_val val)

Returns whether the JSON value is signed integer (int64_t). Returns false if val is NULL.

◆ yyjson_mut_is_str()

yyjson_api_inline bool yyjson_mut_is_str ( yyjson_mut_val val)

Returns whether the JSON value is string. Returns false if val is NULL.

◆ yyjson_mut_is_true()

yyjson_api_inline bool yyjson_mut_is_true ( yyjson_mut_val val)

Returns whether the JSON value is true. Returns false if val is NULL.

◆ yyjson_mut_is_uint()

yyjson_api_inline bool yyjson_mut_is_uint ( yyjson_mut_val val)

Returns whether the JSON value is unsigned integer (uint64_t). Returns false if val is NULL.

◆ yyjson_mut_merge_patch()

yyjson_api yyjson_mut_val * yyjson_mut_merge_patch ( yyjson_mut_doc doc,
yyjson_mut_val orig,
yyjson_mut_val patch 
)

Creates and returns a merge-patched JSON value (RFC 7386). The memory of the returned value is allocated by the doc. Returns NULL if the patch could not be applied.

Warning
This function is recursive and may cause a stack overflow if the object level is too deep.

◆ yyjson_mut_null()

yyjson_api_inline yyjson_mut_val * yyjson_mut_null ( yyjson_mut_doc doc)

Creates and returns a null value, returns NULL on error.

◆ yyjson_mut_obj()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj ( yyjson_mut_doc doc)

Creates and returns a mutable object, returns NULL on error.

◆ yyjson_mut_obj_add()

yyjson_api_inline bool yyjson_mut_obj_add ( yyjson_mut_val obj,
yyjson_mut_val key,
yyjson_mut_val val 
)

Adds a key-value pair at the end of the object. This function allows duplicated key in one object.

Parameters
objThe object to which the new key-value pair is to be added.
keyThe key, should be a string which is created by yyjson_mut_str(), yyjson_mut_strn(), yyjson_mut_strcpy() or yyjson_mut_strncpy().
valThe value to add to the object.
Returns
Whether successful.

◆ yyjson_mut_obj_add_arr()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_add_arr ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key 
)

Creates and adds a new array to the target object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep these strings unmodified for the lifetime of this JSON document.
Returns
The new array, or NULL on error.

◆ yyjson_mut_obj_add_bool()

yyjson_api_inline bool yyjson_mut_obj_add_bool ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
bool  val 
)

Adds a bool value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_false()

yyjson_api_inline bool yyjson_mut_obj_add_false ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key 
)

Adds a false value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_int()

yyjson_api_inline bool yyjson_mut_obj_add_int ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
int64_t  val 
)

Adds an int value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_null()

yyjson_api_inline bool yyjson_mut_obj_add_null ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key 
)

Adds a null value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_obj()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_add_obj ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key 
)

Creates and adds a new object to the target object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep these strings unmodified for the lifetime of this JSON document.
Returns
The new object, or NULL on error.

◆ yyjson_mut_obj_add_real()

yyjson_api_inline bool yyjson_mut_obj_add_real ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
double  val 
)

Adds a double value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_sint()

yyjson_api_inline bool yyjson_mut_obj_add_sint ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
int64_t  val 
)

Adds a signed integer value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_str()

yyjson_api_inline bool yyjson_mut_obj_add_str ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
const char *  val 
)

Adds a string value at the end of the object. The key and val should be null-terminated UTF-8 strings. This function allows duplicated key in one object.

Warning
The key/value strings are not copied, you should keep these strings unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_strcpy()

yyjson_api_inline bool yyjson_mut_obj_add_strcpy ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
const char *  val 
)

Adds a string value at the end of the object. The key and val should be null-terminated UTF-8 strings. The value string is copied. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_strn()

yyjson_api_inline bool yyjson_mut_obj_add_strn ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
const char *  val,
size_t  len 
)

Adds a string value at the end of the object. The key should be a null-terminated UTF-8 string. The val should be a UTF-8 string, null-terminator is not required. The len should be the length of the val, in bytes. This function allows duplicated key in one object.

Warning
The key/value strings are not copied, you should keep these strings unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_strncpy()

yyjson_api_inline bool yyjson_mut_obj_add_strncpy ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
const char *  val,
size_t  len 
)

Adds a string value at the end of the object. The key should be a null-terminated UTF-8 string. The val should be a UTF-8 string, null-terminator is not required. The len should be the length of the val, in bytes. This function allows duplicated key in one object.

Warning
The key strings are not copied, you should keep these strings unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_true()

yyjson_api_inline bool yyjson_mut_obj_add_true ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key 
)

Adds a true value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_uint()

yyjson_api_inline bool yyjson_mut_obj_add_uint ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
uint64_t  val 
)

Adds an unsigned integer value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_add_val()

yyjson_api_inline bool yyjson_mut_obj_add_val ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
yyjson_mut_val val 
)

Adds a JSON value at the end of the object. The key should be a null-terminated UTF-8 string. This function allows duplicated key in one object.

Warning
The key string is not copied, you should keep the string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_obj_clear()

yyjson_api_inline bool yyjson_mut_obj_clear ( yyjson_mut_val obj)

Removes all key-value pairs in this object.

Parameters
objThe object from which all of the values are to be removed.
Returns
Whether successful.

◆ yyjson_mut_obj_get()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_get ( yyjson_mut_val obj,
const char *  key 
)

Returns the value to which the specified key is mapped. Returns NULL if this object contains no mapping for the key. Returns NULL if obj/key is NULL, or type is not object.

The key should be a null-terminated UTF-8 string.

Warning
This function takes a linear search time.

◆ yyjson_mut_obj_getn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_getn ( yyjson_mut_val obj,
const char *  key,
size_t  key_len 
)

Returns the value to which the specified key is mapped. Returns NULL if this object contains no mapping for the key. Returns NULL if obj/key is NULL, or type is not object.

The key should be a UTF-8 string, null-terminator is not required. The key_len should be the length of the key, in bytes.

Warning
This function takes a linear search time.

◆ yyjson_mut_obj_insert()

yyjson_api_inline bool yyjson_mut_obj_insert ( yyjson_mut_val obj,
yyjson_mut_val key,
yyjson_mut_val val,
size_t  idx 
)

Inserts a key-value pair to the object at the given position. This function allows duplicated key in one object.

Parameters
objThe object to which the new key-value pair is to be added.
keyThe key, should be a string which is created by yyjson_mut_str(), yyjson_mut_strn(), yyjson_mut_strcpy() or yyjson_mut_strncpy().
valThe value to add to the object.
idxThe index to which to insert the new pair.
Returns
Whether successful.

◆ yyjson_mut_obj_iter_get()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_get ( yyjson_mut_obj_iter iter,
const char *  key 
)

Iterates to a specified key and returns the value.

This function does the same thing as yyjson_mut_obj_get(), but is much faster if the ordering of the keys is known at compile-time and you are using the same order to look up the values. If the key exists in this object, then the iterator will stop at the next key, otherwise the iterator will not change and NULL is returned.

Parameters
iterThe object iterator, should not be NULL.
keyThe key, should be a UTF-8 string with null-terminator.
Returns
The value to which the specified key is mapped. NULL if this object contains no mapping for the key or input is invalid.
Warning
This function takes a linear search time if the key is not nearby.

◆ yyjson_mut_obj_iter_get_val()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_get_val ( yyjson_mut_val key)

Returns the value for key inside the iteration. If iter is NULL, this function will return NULL.

◆ yyjson_mut_obj_iter_getn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_getn ( yyjson_mut_obj_iter iter,
const char *  key,
size_t  key_len 
)

Iterates to a specified key and returns the value.

This function does the same thing as yyjson_mut_obj_getn() but is much faster if the ordering of the keys is known at compile-time and you are using the same order to look up the values. If the key exists in this object, then the iterator will stop at the next key, otherwise the iterator will not change and NULL is returned.

Parameters
iterThe object iterator, should not be NULL.
keyThe key, should be a UTF-8 string, null-terminator is not required.
key_lenThe the length of key, in bytes.
Returns
The value to which the specified key is mapped. NULL if this object contains no mapping for the key or input is invalid.
Warning
This function takes a linear search time if the key is not nearby.

◆ yyjson_mut_obj_iter_has_next()

yyjson_api_inline bool yyjson_mut_obj_iter_has_next ( yyjson_mut_obj_iter iter)

Returns whether the iteration has more elements. If iter is NULL, this function will return false.

◆ yyjson_mut_obj_iter_init()

yyjson_api_inline bool yyjson_mut_obj_iter_init ( yyjson_mut_val obj,
yyjson_mut_obj_iter iter 
)

Initialize an iterator for this object.

Parameters
objThe object to be iterated over. If this parameter is NULL or not an array, iter will be set to empty.
iterThe iterator to be initialized. If this parameter is NULL, the function will fail and return false.
Returns
true if the iter has been successfully initialized.
Note
The iterator does not need to be destroyed.

◆ yyjson_mut_obj_iter_next()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_next ( yyjson_mut_obj_iter iter)

Returns the next key in the iteration, or NULL on end. If iter is NULL, this function will return NULL.

◆ yyjson_mut_obj_iter_remove()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_iter_remove ( yyjson_mut_obj_iter iter)

Removes current key-value pair in the iteration, returns the removed value. If iter is NULL, this function will return NULL.

◆ yyjson_mut_obj_iter_with()

yyjson_api_inline yyjson_mut_obj_iter yyjson_mut_obj_iter_with ( yyjson_mut_val obj)

Create an iterator with an object, same as yyjson_obj_iter_init().

Parameters
objThe object to be iterated over. If this parameter is NULL or not an object, an empty iterator will returned.
Returns
A new iterator for the object.
Note
The iterator does not need to be destroyed.

◆ yyjson_mut_obj_put()

yyjson_api_inline bool yyjson_mut_obj_put ( yyjson_mut_val obj,
yyjson_mut_val key,
yyjson_mut_val val 
)

Sets a key-value pair at the end of the object. This function may remove all key-value pairs for the given key before add.

Parameters
objThe object to which the new key-value pair is to be added.
keyThe key, should be a string which is created by yyjson_mut_str(), yyjson_mut_strn(), yyjson_mut_strcpy() or yyjson_mut_strncpy().
valThe value to add to the object. If this value is null, the behavior is same as yyjson_mut_obj_remove().
Returns
Whether successful.

◆ yyjson_mut_obj_remove()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_remove ( yyjson_mut_val obj,
yyjson_mut_val key 
)

Removes all key-value pair from the object with given key.

Parameters
objThe object from which the key-value pair is to be removed.
keyThe key, should be a string value.
Returns
The first matched value, or NULL if no matched value.
Warning
This function takes a linear search time.

◆ yyjson_mut_obj_remove_key()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_remove_key ( yyjson_mut_val obj,
const char *  key 
)

Removes all key-value pair from the object with given key.

Parameters
objThe object from which the key-value pair is to be removed.
keyThe key, should be a UTF-8 string with null-terminator.
Returns
The first matched value, or NULL if no matched value.
Warning
This function takes a linear search time.

◆ yyjson_mut_obj_remove_keyn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_remove_keyn ( yyjson_mut_val obj,
const char *  key,
size_t  key_len 
)

Removes all key-value pair from the object with given key.

Parameters
objThe object from which the key-value pair is to be removed.
keyThe key, should be a UTF-8 string, null-terminator is not required.
key_lenThe length of the key.
Returns
The first matched value, or NULL if no matched value.
Warning
This function takes a linear search time.

◆ yyjson_mut_obj_remove_str()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_remove_str ( yyjson_mut_val obj,
const char *  key 
)

Removes all key-value pairs for the given key. Returns the first value to which the specified key is mapped or NULL if this object contains no mapping for the key. The key should be a null-terminated UTF-8 string.

Warning
This function takes a linear search time.

◆ yyjson_mut_obj_remove_strn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_remove_strn ( yyjson_mut_val obj,
const char *  key,
size_t  len 
)

Removes all key-value pairs for the given key. Returns the first value to which the specified key is mapped or NULL if this object contains no mapping for the key. The key should be a UTF-8 string, null-terminator is not required. The len should be the length of the key, in bytes.

Warning
This function takes a linear search time.

◆ yyjson_mut_obj_rename_key()

yyjson_api_inline bool yyjson_mut_obj_rename_key ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
const char *  new_key 
)

Replaces all matching keys with the new key. Returns true if at least one key was renamed. The key and new_key should be a null-terminated UTF-8 string. The new_key is copied and held by doc.

Warning
This function takes a linear search time. If new_key already exists, it will cause duplicate keys.

◆ yyjson_mut_obj_rename_keyn()

yyjson_api_inline bool yyjson_mut_obj_rename_keyn ( yyjson_mut_doc doc,
yyjson_mut_val obj,
const char *  key,
size_t  len,
const char *  new_key,
size_t  new_len 
)

Replaces all matching keys with the new key. Returns true if at least one key was renamed. The key and new_key should be a UTF-8 string, null-terminator is not required. The new_key is copied and held by doc.

Warning
This function takes a linear search time. If new_key already exists, it will cause duplicate keys.

◆ yyjson_mut_obj_replace()

yyjson_api_inline bool yyjson_mut_obj_replace ( yyjson_mut_val obj,
yyjson_mut_val key,
yyjson_mut_val val 
)

Replaces value from the object with given key. If the key is not exist, or the value is NULL, it will fail.

Parameters
objThe object to which the value is to be replaced.
keyThe key, should be a string value.
valThe value to replace into the object.
Returns
Whether successful.
Warning
This function takes a linear search time.

◆ yyjson_mut_obj_rotate()

yyjson_api_inline bool yyjson_mut_obj_rotate ( yyjson_mut_val obj,
size_t  idx 
)

Rotates key-value pairs in the object for the given number of times. For example: {"a":1,"b":2,"c":3,"d":4} rotate 1 is {"b":2,"c":3,"d":4,"a":1}.

Parameters
objThe object to be rotated.
idxIndex (or times) to rotate.
Returns
Whether successful.
Warning
This function takes a linear search time.

◆ yyjson_mut_obj_size()

yyjson_api_inline size_t yyjson_mut_obj_size ( yyjson_mut_val obj)

Returns the number of key-value pairs in this object. Returns 0 if obj is NULL or type is not object.

◆ yyjson_mut_obj_with_kv()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_with_kv ( yyjson_mut_doc doc,
const char **  kv_pairs,
size_t  pair_count 
)

Creates and returns a mutable object with key-value pairs and pair count, returns NULL on error. The keys and values are not copied. The strings should be a null-terminated UTF-8 string.

Warning
The input string is not copied, you should keep this string unmodified for the lifetime of this JSON document.
Example
const char *kv_pairs[4] = { "id", "01", "name", "Harry" };
yyjson_mut_val *obj = yyjson_mut_obj_with_kv(doc, kv_pairs, 2);
yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_with_kv(yyjson_mut_doc *doc, const char **kv_pairs, size_t pair_count)
Definition: yyjson.h:6603

◆ yyjson_mut_obj_with_str()

yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_with_str ( yyjson_mut_doc doc,
const char **  keys,
const char **  vals,
size_t  count 
)

Creates and returns a mutable object with keys and values, returns NULL on error. The keys and values are not copied. The strings should be a null-terminated UTF-8 string.

Warning
The input string is not copied, you should keep this string unmodified for the lifetime of this JSON document.
Example
const char *keys[2] = { "id", "name" };
const char *vals[2] = { "01", "Harry" };
yyjson_mut_val *obj = yyjson_mut_obj_with_str(doc, keys, vals, 2);
yyjson_api_inline yyjson_mut_val * yyjson_mut_obj_with_str(yyjson_mut_doc *doc, const char **keys, const char **vals, size_t count)
Definition: yyjson.h:6572

◆ yyjson_mut_patch()

yyjson_api yyjson_mut_val * yyjson_mut_patch ( yyjson_mut_doc doc,
yyjson_mut_val orig,
yyjson_mut_val patch,
yyjson_patch_err err 
)

Creates and returns a patched JSON value (RFC 6902). The memory of the returned value is allocated by the doc. The err is used to receive error information, pass NULL if not needed. Returns NULL if the patch could not be applied.

◆ yyjson_mut_ptr_add()

yyjson_api_inline bool yyjson_mut_ptr_add ( yyjson_mut_val val,
const char *  ptr,
yyjson_mut_val new_val,
yyjson_mut_doc doc 
)

Add (insert) value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8 with null-terminator).
docOnly used to create new values when needed.
new_valThe value to be added.
Returns
true if JSON pointer is valid and new value is added, false otherwise.
Note
The parent nodes will be created if they do not exist.

◆ yyjson_mut_ptr_addn()

yyjson_api_inline bool yyjson_mut_ptr_addn ( yyjson_mut_val val,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val,
yyjson_mut_doc doc 
)

Add (insert) value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
docOnly used to create new values when needed.
new_valThe value to be added.
Returns
true if JSON pointer is valid and new value is added, false otherwise.
Note
The parent nodes will be created if they do not exist.

◆ yyjson_mut_ptr_addx()

yyjson_api_inline bool yyjson_mut_ptr_addx ( yyjson_mut_val val,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val,
yyjson_mut_doc doc,
bool  create_parent,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Add (insert) value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
docOnly used to create new values when needed.
new_valThe value to be added.
create_parentWhether to create parent nodes if not exist.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
true if JSON pointer is valid and new value is added, false otherwise.

◆ yyjson_mut_ptr_get()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_get ( yyjson_mut_val val,
const char *  ptr 
)

Get value by a JSON Pointer.

Parameters
valThe JSON value to be queried.
ptrThe JSON pointer string (UTF-8 with null-terminator).
Returns
The value referenced by the JSON pointer. NULL if val or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_mut_ptr_getn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_getn ( yyjson_mut_val val,
const char *  ptr,
size_t  len 
)

Get value by a JSON Pointer.

Parameters
valThe JSON value to be queried.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
Returns
The value referenced by the JSON pointer. NULL if val or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_mut_ptr_getx()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_getx ( yyjson_mut_val val,
const char *  ptr,
size_t  len,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Get value by a JSON Pointer.

Parameters
valThe JSON value to be queried.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
The value referenced by the JSON pointer. NULL if val or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_mut_ptr_remove()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_remove ( yyjson_mut_val val,
const char *  ptr 
)

Remove value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8 with null-terminator).
Returns
The removed value, or NULL on error.

◆ yyjson_mut_ptr_removen()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_removen ( yyjson_mut_val val,
const char *  ptr,
size_t  len 
)

Remove value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
Returns
The removed value, or NULL on error.

◆ yyjson_mut_ptr_removex()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_removex ( yyjson_mut_val val,
const char *  ptr,
size_t  len,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Remove value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
The removed value, or NULL on error.

◆ yyjson_mut_ptr_replace()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_replace ( yyjson_mut_val val,
const char *  ptr,
yyjson_mut_val new_val 
)

Replace value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8 with null-terminator).
new_valThe new value to replace the old one.
Returns
The old value that was replaced, or NULL if not found.

◆ yyjson_mut_ptr_replacen()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_replacen ( yyjson_mut_val val,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val 
)

Replace value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe new value to replace the old one.
Returns
The old value that was replaced, or NULL if not found.

◆ yyjson_mut_ptr_replacex()

yyjson_api_inline yyjson_mut_val * yyjson_mut_ptr_replacex ( yyjson_mut_val val,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Replace value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe new value to replace the old one.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
The old value that was replaced, or NULL if not found.

◆ yyjson_mut_ptr_set()

yyjson_api_inline bool yyjson_mut_ptr_set ( yyjson_mut_val val,
const char *  ptr,
yyjson_mut_val new_val,
yyjson_mut_doc doc 
)

Set value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8 with null-terminator).
new_valThe value to be set, pass NULL to remove.
docOnly used to create new values when needed.
Returns
true if JSON pointer is valid and new value is set, false otherwise.
Note
The parent nodes will be created if they do not exist. If the target value already exists, it will be replaced by the new value.

◆ yyjson_mut_ptr_setn()

yyjson_api_inline bool yyjson_mut_ptr_setn ( yyjson_mut_val val,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val,
yyjson_mut_doc doc 
)

Set value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe value to be set, pass NULL to remove.
docOnly used to create new values when needed.
Returns
true if JSON pointer is valid and new value is set, false otherwise.
Note
The parent nodes will be created if they do not exist. If the target value already exists, it will be replaced by the new value.

◆ yyjson_mut_ptr_setx()

yyjson_api_inline bool yyjson_mut_ptr_setx ( yyjson_mut_val val,
const char *  ptr,
size_t  len,
yyjson_mut_val new_val,
yyjson_mut_doc doc,
bool  create_parent,
yyjson_ptr_ctx ctx,
yyjson_ptr_err err 
)

Set value by a JSON pointer.

Parameters
valThe target JSON value.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
new_valThe value to be set, pass NULL to remove.
docOnly used to create new values when needed.
create_parentWhether to create parent nodes if not exist.
ctxA pointer to store the result context, or NULL if not needed.
errA pointer to store the error information, or NULL if not needed.
Returns
true if JSON pointer is valid and new value is set, false otherwise.
Note
If the target value already exists, it will be replaced by the new value.

◆ yyjson_mut_raw()

yyjson_api_inline yyjson_mut_val * yyjson_mut_raw ( yyjson_mut_doc doc,
const char *  str 
)

Creates and returns a raw value, returns NULL on error. The str should be a null-terminated UTF-8 string.

Warning
The input string is not copied, you should keep this string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_rawcpy()

yyjson_api_inline yyjson_mut_val * yyjson_mut_rawcpy ( yyjson_mut_doc doc,
const char *  str 
)

Creates and returns a raw value, returns NULL on error. The str should be a null-terminated UTF-8 string. The input string is copied and held by the document.

◆ yyjson_mut_rawn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_rawn ( yyjson_mut_doc doc,
const char *  str,
size_t  len 
)

Creates and returns a raw value, returns NULL on error. The str should be a UTF-8 string, null-terminator is not required.

Warning
The input string is not copied, you should keep this string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_rawncpy()

yyjson_api_inline yyjson_mut_val * yyjson_mut_rawncpy ( yyjson_mut_doc doc,
const char *  str,
size_t  len 
)

Creates and returns a raw value, returns NULL on error. The str should be a UTF-8 string, null-terminator is not required. The input string is copied and held by the document.

◆ yyjson_mut_read_number()

yyjson_api_inline const char * yyjson_mut_read_number ( const char *  dat,
yyjson_mut_val val,
yyjson_read_flag  flg,
const yyjson_alc alc,
yyjson_read_err err 
)

Read a JSON number.

This function is thread-safe when data is not modified by other threads.

Parameters
datThe JSON data (UTF-8 without BOM), null-terminator is required. If this parameter is NULL, the function will fail and return NULL.
valThe output value where result is stored. If this parameter is NULL, the function will fail and return NULL. The value will hold either UINT or SINT or REAL number;
flgThe JSON read options. Multiple options can be combined with | operator. 0 means no options. Supports YYJSON_READ_NUMBER_AS_RAW and YYJSON_READ_ALLOW_INF_AND_NAN.
alcThe memory allocator used for long number. It is only used when the built-in floating point reader is disabled. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
If successful, a pointer to the character after the last character used in the conversion, NULL if an error occurs.

◆ yyjson_mut_real()

yyjson_api_inline yyjson_mut_val * yyjson_mut_real ( yyjson_mut_doc doc,
double  num 
)

Creates and returns an real number value, returns NULL on error.

◆ yyjson_mut_set_arr()

yyjson_api_inline bool yyjson_mut_set_arr ( yyjson_mut_val val)

Set the value to array. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_bool()

yyjson_api_inline bool yyjson_mut_set_bool ( yyjson_mut_val val,
bool  num 
)

Set the value to bool. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_int()

yyjson_api_inline bool yyjson_mut_set_int ( yyjson_mut_val val,
int  num 
)

Set the value to int. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_null()

yyjson_api_inline bool yyjson_mut_set_null ( yyjson_mut_val val)

Set the value to null. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_obj()

yyjson_api_inline bool yyjson_mut_set_obj ( yyjson_mut_val val)

Set the value to array. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_raw()

yyjson_api_inline bool yyjson_mut_set_raw ( yyjson_mut_val val,
const char *  raw,
size_t  len 
)

Set the value to raw. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_real()

yyjson_api_inline bool yyjson_mut_set_real ( yyjson_mut_val val,
double  num 
)

Set the value to real. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_sint()

yyjson_api_inline bool yyjson_mut_set_sint ( yyjson_mut_val val,
int64_t  num 
)

Set the value to sint. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_str()

yyjson_api_inline bool yyjson_mut_set_str ( yyjson_mut_val val,
const char *  str 
)

Set the value to string (null-terminated). Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_strn()

yyjson_api_inline bool yyjson_mut_set_strn ( yyjson_mut_val val,
const char *  str,
size_t  len 
)

Set the value to string (with length). Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_set_uint()

yyjson_api_inline bool yyjson_mut_set_uint ( yyjson_mut_val val,
uint64_t  num 
)

Set the value to uint. Returns false if input is NULL.

Warning
This function should not be used on an existing object or array.

◆ yyjson_mut_sint()

yyjson_api_inline yyjson_mut_val * yyjson_mut_sint ( yyjson_mut_doc doc,
int64_t  num 
)

Creates and returns a signed integer value, returns NULL on error.

◆ yyjson_mut_str()

yyjson_api_inline yyjson_mut_val * yyjson_mut_str ( yyjson_mut_doc doc,
const char *  str 
)

Creates and returns a string value, returns NULL on error. The str should be a null-terminated UTF-8 string.

Warning
The input string is not copied, you should keep this string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_strcpy()

yyjson_api_inline yyjson_mut_val * yyjson_mut_strcpy ( yyjson_mut_doc doc,
const char *  str 
)

Creates and returns a string value, returns NULL on error. The str should be a null-terminated UTF-8 string. The input string is copied and held by the document.

◆ yyjson_mut_strn()

yyjson_api_inline yyjson_mut_val * yyjson_mut_strn ( yyjson_mut_doc doc,
const char *  str,
size_t  len 
)

Creates and returns a string value, returns NULL on error. The str should be a UTF-8 string, null-terminator is not required.

Warning
The input string is not copied, you should keep this string unmodified for the lifetime of this JSON document.

◆ yyjson_mut_strncpy()

yyjson_api_inline yyjson_mut_val * yyjson_mut_strncpy ( yyjson_mut_doc doc,
const char *  str,
size_t  len 
)

Creates and returns a string value, returns NULL on error. The str should be a UTF-8 string, null-terminator is not required. The input string is copied and held by the document.

◆ yyjson_mut_true()

yyjson_api_inline yyjson_mut_val * yyjson_mut_true ( yyjson_mut_doc doc)

Creates and returns a true value, returns NULL on error.

◆ yyjson_mut_uint()

yyjson_api_inline yyjson_mut_val * yyjson_mut_uint ( yyjson_mut_doc doc,
uint64_t  num 
)

Creates and returns an unsigned integer value, returns NULL on error.

◆ yyjson_mut_val_imut_copy()

yyjson_api yyjson_doc * yyjson_mut_val_imut_copy ( yyjson_mut_val val,
const yyjson_alc alc 
)

Copies and returns a new immutable document from input, returns NULL on error. This makes a deep-copy on the mutable value. The returned document should be freed with yyjson_doc_free().

Note
mut_val -> imut_doc.
Warning
This function is recursive and may cause a stack overflow if the object level is too deep.

◆ yyjson_mut_val_mut_copy()

yyjson_api yyjson_mut_val * yyjson_mut_val_mut_copy ( yyjson_mut_doc doc,
yyjson_mut_val val 
)

Copies and returns a new mutable value from input, returns NULL on error. This makes a deep-copy on the mutable value. The memory was managed by mutable document.

Note
mut_val -> mut_val.
Warning
This function is recursive and may cause a stack overflow if the object level is too deep.

◆ yyjson_mut_val_write()

yyjson_api_inline char * yyjson_mut_val_write ( const yyjson_mut_val val,
yyjson_write_flag  flg,
size_t *  len 
)

Write a value to JSON string.

This function is thread-safe when: The val is not modified by other threads.

Parameters
valThe JSON root value. If this parameter is NULL, the function will fail and return NULL.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
lenA pointer to receive output length in bytes (not including the null-terminator). Pass NULL if you don't need length information.
Returns
A new JSON string, or NULL if an error occurs. This string is encoded as UTF-8 with a null-terminator. When it's no longer needed, it should be freed with free().

◆ yyjson_mut_val_write_file()

yyjson_api bool yyjson_mut_val_write_file ( const char *  path,
const yyjson_mut_val val,
yyjson_write_flag  flg,
const yyjson_alc alc,
yyjson_write_err err 
)

Write a value to JSON file with options.

This function is thread-safe when:

  1. The file is not accessed by other threads.
  2. The val is not modified by other threads.
  3. The alc is thread-safe or NULL.
Parameters
pathThe JSON file's path. If this path is NULL or invalid, the function will fail and return false. If this file is not empty, the content will be discarded.
valThe mutable JSON root value. If this parameter is NULL, the function will fail and return NULL.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
true if successful, false if an error occurs.
Warning
On 32-bit operating system, files larger than 2GB may fail to write.

◆ yyjson_mut_val_write_fp()

yyjson_api bool yyjson_mut_val_write_fp ( FILE *  fp,
const yyjson_mut_val val,
yyjson_write_flag  flg,
const yyjson_alc alc,
yyjson_write_err err 
)

Write a value to JSON file with options.

Parameters
fpThe file pointer. The data will be written to the current position of the file. If this path is NULL or invalid, the function will fail and return false.
valThe mutable JSON root value. If this parameter is NULL, the function will fail and return NULL.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
true if successful, false if an error occurs.
Warning
On 32-bit operating system, files larger than 2GB may fail to write.

◆ yyjson_mut_val_write_opts()

yyjson_api char * yyjson_mut_val_write_opts ( const yyjson_mut_val val,
yyjson_write_flag  flg,
const yyjson_alc alc,
size_t *  len,
yyjson_write_err err 
)

Write a value to JSON string with options.

This function is thread-safe when:

  1. The val is not modified by other threads.
  2. The alc is thread-safe or NULL.
Parameters
valThe mutable JSON root value. If this parameter is NULL, the function will fail and return NULL.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
lenA pointer to receive output length in bytes (not including the null-terminator). Pass NULL if you don't need length information.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
A new JSON string, or NULL if an error occurs. This string is encoded as UTF-8 with a null-terminator. When it's no longer needed, it should be freed with free() or alc->free().

◆ yyjson_mut_write()

yyjson_api_inline char * yyjson_mut_write ( const yyjson_mut_doc doc,
yyjson_write_flag  flg,
size_t *  len 
)

Write a document to JSON string.

This function is thread-safe when: The doc is not modified by other threads.

Parameters
docThe JSON document. If this doc is NULL or has no root, the function will fail and return false.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
lenA pointer to receive output length in bytes (not including the null-terminator). Pass NULL if you don't need length information.
Returns
A new JSON string, or NULL if an error occurs. This string is encoded as UTF-8 with a null-terminator. When it's no longer needed, it should be freed with free().

◆ yyjson_mut_write_file()

yyjson_api bool yyjson_mut_write_file ( const char *  path,
const yyjson_mut_doc doc,
yyjson_write_flag  flg,
const yyjson_alc alc,
yyjson_write_err err 
)

Write a document to JSON file with options.

This function is thread-safe when:

  1. The file is not accessed by other threads.
  2. The doc is not modified by other threads.
  3. The alc is thread-safe or NULL.
Parameters
pathThe JSON file's path. If this path is NULL or invalid, the function will fail and return false. If this file is not empty, the content will be discarded.
docThe mutable JSON document. If this doc is NULL or has no root, the function will fail and return false.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
true if successful, false if an error occurs.
Warning
On 32-bit operating system, files larger than 2GB may fail to write.

◆ yyjson_mut_write_fp()

yyjson_api bool yyjson_mut_write_fp ( FILE *  fp,
const yyjson_mut_doc doc,
yyjson_write_flag  flg,
const yyjson_alc alc,
yyjson_write_err err 
)

Write a document to file pointer with options.

Parameters
fpThe file pointer. The data will be written to the current position of the file. If this fp is NULL or invalid, the function will fail and return false.
docThe mutable JSON document. If this doc is NULL or has no root, the function will fail and return false.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
true if successful, false if an error occurs.
Warning
On 32-bit operating system, files larger than 2GB may fail to write.

◆ yyjson_mut_write_opts()

yyjson_api char * yyjson_mut_write_opts ( const yyjson_mut_doc doc,
yyjson_write_flag  flg,
const yyjson_alc alc,
size_t *  len,
yyjson_write_err err 
)

Write a document to JSON string with options.

This function is thread-safe when:

  1. The doc is not modified by other threads.
  2. The alc is thread-safe or NULL.
Parameters
docThe mutable JSON document. If this doc is NULL or has no root, the function will fail and return false.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
lenA pointer to receive output length in bytes (not including the null-terminator). Pass NULL if you don't need length information.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
A new JSON string, or NULL if an error occurs. This string is encoded as UTF-8 with a null-terminator. When it's no longer needed, it should be freed with free() or alc->free().

◆ yyjson_obj_get()

yyjson_api_inline yyjson_val * yyjson_obj_get ( yyjson_val obj,
const char *  key 
)

Returns the value to which the specified key is mapped. Returns NULL if this object contains no mapping for the key. Returns NULL if obj/key is NULL, or type is not object.

The key should be a null-terminated UTF-8 string.

Warning
This function takes a linear search time.

◆ yyjson_obj_getn()

yyjson_api_inline yyjson_val * yyjson_obj_getn ( yyjson_val obj,
const char *  key,
size_t  key_len 
)

Returns the value to which the specified key is mapped. Returns NULL if this object contains no mapping for the key. Returns NULL if obj/key is NULL, or type is not object.

The key should be a UTF-8 string, null-terminator is not required. The key_len should be the length of the key, in bytes.

Warning
This function takes a linear search time.

◆ yyjson_obj_iter_get()

yyjson_api_inline yyjson_val * yyjson_obj_iter_get ( yyjson_obj_iter iter,
const char *  key 
)

Iterates to a specified key and returns the value.

This function does the same thing as yyjson_obj_get(), but is much faster if the ordering of the keys is known at compile-time and you are using the same order to look up the values. If the key exists in this object, then the iterator will stop at the next key, otherwise the iterator will not change and NULL is returned.

Parameters
iterThe object iterator, should not be NULL.
keyThe key, should be a UTF-8 string with null-terminator.
Returns
The value to which the specified key is mapped. NULL if this object contains no mapping for the key or input is invalid.
Warning
This function takes a linear search time if the key is not nearby.

◆ yyjson_obj_iter_get_val()

yyjson_api_inline yyjson_val * yyjson_obj_iter_get_val ( yyjson_val key)

Returns the value for key inside the iteration. If iter is NULL, this function will return NULL.

◆ yyjson_obj_iter_getn()

yyjson_api_inline yyjson_val * yyjson_obj_iter_getn ( yyjson_obj_iter iter,
const char *  key,
size_t  key_len 
)

Iterates to a specified key and returns the value.

This function does the same thing as yyjson_obj_getn(), but is much faster if the ordering of the keys is known at compile-time and you are using the same order to look up the values. If the key exists in this object, then the iterator will stop at the next key, otherwise the iterator will not change and NULL is returned.

Parameters
iterThe object iterator, should not be NULL.
keyThe key, should be a UTF-8 string, null-terminator is not required.
key_lenThe the length of key, in bytes.
Returns
The value to which the specified key is mapped. NULL if this object contains no mapping for the key or input is invalid.
Warning
This function takes a linear search time if the key is not nearby.

◆ yyjson_obj_iter_has_next()

yyjson_api_inline bool yyjson_obj_iter_has_next ( yyjson_obj_iter iter)

Returns whether the iteration has more elements. If iter is NULL, this function will return false.

◆ yyjson_obj_iter_init()

yyjson_api_inline bool yyjson_obj_iter_init ( yyjson_val obj,
yyjson_obj_iter iter 
)

Initialize an iterator for this object.

Parameters
objThe object to be iterated over. If this parameter is NULL or not an object, iter will be set to empty.
iterThe iterator to be initialized. If this parameter is NULL, the function will fail and return false.
Returns
true if the iter has been successfully initialized.
Note
The iterator does not need to be destroyed.

◆ yyjson_obj_iter_next()

yyjson_api_inline yyjson_val * yyjson_obj_iter_next ( yyjson_obj_iter iter)

Returns the next key in the iteration, or NULL on end. If iter is NULL, this function will return NULL.

◆ yyjson_obj_iter_with()

yyjson_api_inline yyjson_obj_iter yyjson_obj_iter_with ( yyjson_val obj)

Create an iterator with an object, same as yyjson_obj_iter_init().

Parameters
objThe object to be iterated over. If this parameter is NULL or not an object, an empty iterator will returned.
Returns
A new iterator for the object.
Note
The iterator does not need to be destroyed.

◆ yyjson_obj_size()

yyjson_api_inline size_t yyjson_obj_size ( yyjson_val obj)

Returns the number of key-value pairs in this object. Returns 0 if obj is NULL or type is not object.

◆ yyjson_patch()

yyjson_api yyjson_mut_val * yyjson_patch ( yyjson_mut_doc doc,
yyjson_val orig,
yyjson_val patch,
yyjson_patch_err err 
)

Creates and returns a patched JSON value (RFC 6902). The memory of the returned value is allocated by the doc. The err is used to receive error information, pass NULL if not needed. Returns NULL if the patch could not be applied.

◆ yyjson_ptr_ctx_append()

yyjson_api_inline bool yyjson_ptr_ctx_append ( yyjson_ptr_ctx ctx,
yyjson_mut_val key,
yyjson_mut_val val 
)

Append value by JSON pointer context.

Parameters
ctxThe context from the yyjson_mut_ptr_xxx() calls.
keyNew key if ctx->ctn is object, or NULL if ctx->ctn is array.
valNew value to be added.
Returns
true on success or false on fail.

◆ yyjson_ptr_ctx_remove()

yyjson_api_inline bool yyjson_ptr_ctx_remove ( yyjson_ptr_ctx ctx)

Remove value by JSON pointer context.

Parameters
ctxThe context from the yyjson_mut_ptr_xxx() calls.
Returns
true on success or false on fail.
Note
If success, the old value will be returned via ctx->old.

◆ yyjson_ptr_ctx_replace()

yyjson_api_inline bool yyjson_ptr_ctx_replace ( yyjson_ptr_ctx ctx,
yyjson_mut_val val 
)

Replace value by JSON pointer context.

Parameters
ctxThe context from the yyjson_mut_ptr_xxx() calls.
valNew value to be replaced.
Returns
true on success or false on fail.
Note
If success, the old value will be returned via ctx->old.

◆ yyjson_ptr_get()

yyjson_api_inline yyjson_val * yyjson_ptr_get ( yyjson_val val,
const char *  ptr 
)

Get value by a JSON Pointer.

Parameters
valThe JSON value to be queried.
ptrThe JSON pointer string (UTF-8 with null-terminator).
Returns
The value referenced by the JSON pointer. NULL if val or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_ptr_get_bool()

yyjson_api_inline bool yyjson_ptr_get_bool ( yyjson_val root,
const char *  ptr,
bool *  value 
)

Set provided value if the JSON Pointer (RFC 6901) exists and is type bool. Returns true if value at ptr exists and is the correct type, otherwise false.

◆ yyjson_ptr_get_num()

yyjson_api_inline bool yyjson_ptr_get_num ( yyjson_val root,
const char *  ptr,
double *  value 
)

Set provided value if the JSON Pointer (RFC 6901) exists and is type sint, uint or real. Returns true if value at ptr exists and is the correct type, otherwise false.

◆ yyjson_ptr_get_real()

yyjson_api_inline bool yyjson_ptr_get_real ( yyjson_val root,
const char *  ptr,
double *  value 
)

Set provided value if the JSON Pointer (RFC 6901) exists and is type real. Returns true if value at ptr exists and is the correct type, otherwise false.

◆ yyjson_ptr_get_sint()

yyjson_api_inline bool yyjson_ptr_get_sint ( yyjson_val root,
const char *  ptr,
int64_t *  value 
)

Set provided value if the JSON Pointer (RFC 6901) exists and is an integer that fits in int64_t. Returns true if successful, otherwise false.

◆ yyjson_ptr_get_str()

yyjson_api_inline bool yyjson_ptr_get_str ( yyjson_val root,
const char *  ptr,
const char **  value 
)

Set provided value if the JSON Pointer (RFC 6901) exists and is type string. Returns true if value at ptr exists and is the correct type, otherwise false.

◆ yyjson_ptr_get_uint()

yyjson_api_inline bool yyjson_ptr_get_uint ( yyjson_val root,
const char *  ptr,
uint64_t *  value 
)

Set provided value if the JSON Pointer (RFC 6901) exists and is an integer that fits in uint64_t. Returns true if successful, otherwise false.

◆ yyjson_ptr_getn()

yyjson_api_inline yyjson_val * yyjson_ptr_getn ( yyjson_val val,
const char *  ptr,
size_t  len 
)

Get value by a JSON Pointer.

Parameters
valThe JSON value to be queried.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
Returns
The value referenced by the JSON pointer. NULL if val or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_ptr_getx()

yyjson_api_inline yyjson_val * yyjson_ptr_getx ( yyjson_val val,
const char *  ptr,
size_t  len,
yyjson_ptr_err err 
)

Get value by a JSON Pointer.

Parameters
valThe JSON value to be queried.
ptrThe JSON pointer string (UTF-8, null-terminator is not required).
lenThe length of ptr in bytes.
errA pointer to store the error information, or NULL if not needed.
Returns
The value referenced by the JSON pointer. NULL if val or ptr is NULL, or the JSON pointer cannot be resolved.

◆ yyjson_read()

yyjson_api_inline yyjson_doc * yyjson_read ( const char *  dat,
size_t  len,
yyjson_read_flag  flg 
)

Read a JSON string.

This function is thread-safe.

Parameters
datThe JSON data (UTF-8 without BOM), null-terminator is not required. If this parameter is NULL, the function will fail and return NULL.
lenThe length of JSON data in bytes. If this parameter is 0, the function will fail and return NULL.
flgThe JSON read options. Multiple options can be combined with | operator. 0 means no options.
Returns
A new JSON document, or NULL if an error occurs. When it's no longer needed, it should be freed with yyjson_doc_free().

◆ yyjson_read_file()

yyjson_api yyjson_doc * yyjson_read_file ( const char *  path,
yyjson_read_flag  flg,
const yyjson_alc alc,
yyjson_read_err err 
)

Read a JSON file.

This function is thread-safe when:

  1. The file is not modified by other threads.
  2. The alc is thread-safe or NULL.
Parameters
pathThe JSON file's path. If this path is NULL or invalid, the function will fail and return NULL.
flgThe JSON read options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON reader. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
A new JSON document, or NULL if an error occurs. When it's no longer needed, it should be freed with yyjson_doc_free().
Warning
On 32-bit operating system, files larger than 2GB may fail to read.

◆ yyjson_read_fp()

yyjson_api yyjson_doc * yyjson_read_fp ( FILE *  fp,
yyjson_read_flag  flg,
const yyjson_alc alc,
yyjson_read_err err 
)

Read JSON from a file pointer.

Parameters
fpThe file pointer. The data will be read from the current position of the FILE to the end. If this fp is NULL or invalid, the function will fail and return NULL.
flgThe JSON read options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON reader. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
A new JSON document, or NULL if an error occurs. When it's no longer needed, it should be freed with yyjson_doc_free().
Warning
On 32-bit operating system, files larger than 2GB may fail to read.

◆ yyjson_read_max_memory_usage()

yyjson_api_inline size_t yyjson_read_max_memory_usage ( size_t  len,
yyjson_read_flag  flg 
)

Returns the size of maximum memory usage to read a JSON data.

You may use this value to avoid malloc() or calloc() call inside the reader to get better performance, or read multiple JSON with one piece of memory.

Parameters
lenThe length of JSON data in bytes.
flgThe JSON read options.
Returns
The maximum memory size to read this JSON, or 0 if overflow.
Example
// read multiple JSON with same pre-allocated memory
char *dat1, *dat2, *dat3; // JSON data
size_t len1, len2, len3; // JSON length
size_t max_len = MAX(len1, MAX(len2, len3));
// use one allocator for multiple JSON
size_t size = yyjson_read_max_memory_usage(max_len, 0);
void *buf = malloc(size);
yyjson_alc_pool_init(&alc, buf, size);
// no more alloc() or realloc() call during reading
doc = yyjson_read_opts(dat1, len1, 0, &alc, NULL);
doc = yyjson_read_opts(dat2, len2, 0, &alc, NULL);
doc = yyjson_read_opts(dat3, len3, 0, &alc, NULL);
free(buf);
yyjson_api_inline void yyjson_doc_free(yyjson_doc *doc)
Definition: yyjson.h:4833
yyjson_api_inline size_t yyjson_read_max_memory_usage(size_t len, yyjson_read_flag flg)
Definition: yyjson.h:981
See also
yyjson_alc_pool_init()

◆ yyjson_read_number()

yyjson_api const char * yyjson_read_number ( const char *  dat,
yyjson_val val,
yyjson_read_flag  flg,
const yyjson_alc alc,
yyjson_read_err err 
)

Read a JSON number.

This function is thread-safe when data is not modified by other threads.

Parameters
datThe JSON data (UTF-8 without BOM), null-terminator is required. If this parameter is NULL, the function will fail and return NULL.
valThe output value where result is stored. If this parameter is NULL, the function will fail and return NULL. The value will hold either UINT or SINT or REAL number;
flgThe JSON read options. Multiple options can be combined with | operator. 0 means no options. Supports YYJSON_READ_NUMBER_AS_RAW and YYJSON_READ_ALLOW_INF_AND_NAN.
alcThe memory allocator used for long number. It is only used when the built-in floating point reader is disabled. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
If successful, a pointer to the character after the last character used in the conversion, NULL if an error occurs.

◆ yyjson_read_opts()

yyjson_api yyjson_doc * yyjson_read_opts ( char *  dat,
size_t  len,
yyjson_read_flag  flg,
const yyjson_alc alc,
yyjson_read_err err 
)

Read JSON with options.

This function is thread-safe when:

  1. The dat is not modified by other threads.
  2. The alc is thread-safe or NULL.
Parameters
datThe JSON data (UTF-8 without BOM), null-terminator is not required. If this parameter is NULL, the function will fail and return NULL. The dat will not be modified without the flag YYJSON_READ_INSITU, so you can pass a const char * string and case it to char * if you don't use the YYJSON_READ_INSITU flag.
lenThe length of JSON data in bytes. If this parameter is 0, the function will fail and return NULL.
flgThe JSON read options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON reader. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
A new JSON document, or NULL if an error occurs. When it's no longer needed, it should be freed with yyjson_doc_free().

◆ yyjson_set_bool()

yyjson_api_inline bool yyjson_set_bool ( yyjson_val val,
bool  num 
)

Set the value to bool. Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_set_int()

yyjson_api_inline bool yyjson_set_int ( yyjson_val val,
int  num 
)

Set the value to int. Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_set_null()

yyjson_api_inline bool yyjson_set_null ( yyjson_val val)

Set the value to null. Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_set_raw()

yyjson_api_inline bool yyjson_set_raw ( yyjson_val val,
const char *  raw,
size_t  len 
)

Set the value to raw. Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_set_real()

yyjson_api_inline bool yyjson_set_real ( yyjson_val val,
double  num 
)

Set the value to real. Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_set_sint()

yyjson_api_inline bool yyjson_set_sint ( yyjson_val val,
int64_t  num 
)

Set the value to sint. Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_set_str()

yyjson_api_inline bool yyjson_set_str ( yyjson_val val,
const char *  str 
)

Set the value to string (null-terminated). Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_set_strn()

yyjson_api_inline bool yyjson_set_strn ( yyjson_val val,
const char *  str,
size_t  len 
)

Set the value to string (with length). Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_set_uint()

yyjson_api_inline bool yyjson_set_uint ( yyjson_val val,
uint64_t  num 
)

Set the value to uint. Returns false if input is NULL or val is object or array.

Warning
This will modify the immutable value, use with caution.

◆ yyjson_val_mut_copy()

yyjson_api yyjson_mut_val * yyjson_val_mut_copy ( yyjson_mut_doc doc,
yyjson_val val 
)

Copies and returns a new mutable value from input, returns NULL on error. This makes a deep-copy on the immutable value. The memory was managed by mutable document.

Note
imut_val -> mut_val.

◆ yyjson_val_write()

yyjson_api_inline char * yyjson_val_write ( const yyjson_val val,
yyjson_write_flag  flg,
size_t *  len 
)

Write a value to JSON string.

This function is thread-safe.

Parameters
valThe JSON root value. If this parameter is NULL, the function will fail and return NULL.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
lenA pointer to receive output length in bytes (not including the null-terminator). Pass NULL if you don't need length information.
Returns
A new JSON string, or NULL if an error occurs. This string is encoded as UTF-8 with a null-terminator. When it's no longer needed, it should be freed with free().

◆ yyjson_val_write_file()

yyjson_api bool yyjson_val_write_file ( const char *  path,
const yyjson_val val,
yyjson_write_flag  flg,
const yyjson_alc alc,
yyjson_write_err err 
)

Write a value to JSON file with options.

This function is thread-safe when:

  1. The file is not accessed by other threads.
  2. The alc is thread-safe or NULL.
Parameters
pathThe JSON file's path. If this path is NULL or invalid, the function will fail and return false. If this file is not empty, the content will be discarded.
valThe JSON root value. If this parameter is NULL, the function will fail and return NULL.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
true if successful, false if an error occurs.
Warning
On 32-bit operating system, files larger than 2GB may fail to write.

◆ yyjson_val_write_fp()

yyjson_api bool yyjson_val_write_fp ( FILE *  fp,
const yyjson_val val,
yyjson_write_flag  flg,
const yyjson_alc alc,
yyjson_write_err err 
)

Write a value to file pointer with options.

Parameters
fpThe file pointer. The data will be written to the current position of the file. If this path is NULL or invalid, the function will fail and return false.
valThe JSON root value. If this parameter is NULL, the function will fail and return NULL.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
true if successful, false if an error occurs.
Warning
On 32-bit operating system, files larger than 2GB may fail to write.

◆ yyjson_val_write_opts()

yyjson_api char * yyjson_val_write_opts ( const yyjson_val val,
yyjson_write_flag  flg,
const yyjson_alc alc,
size_t *  len,
yyjson_write_err err 
)

Write a value to JSON string with options.

This function is thread-safe when: The alc is thread-safe or NULL.

Parameters
valThe JSON root value. If this parameter is NULL, the function will fail and return NULL.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
lenA pointer to receive output length in bytes (not including the null-terminator). Pass NULL if you don't need length information.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
A new JSON string, or NULL if an error occurs. This string is encoded as UTF-8 with a null-terminator. When it's no longer needed, it should be freed with free() or alc->free().

◆ yyjson_version()

yyjson_api uint32_t yyjson_version ( void  )

The version of yyjson in hex, same as YYJSON_VERSION_HEX.

◆ yyjson_write()

yyjson_api_inline char * yyjson_write ( const yyjson_doc doc,
yyjson_write_flag  flg,
size_t *  len 
)

Write a document to JSON string.

This function is thread-safe.

Parameters
docThe JSON document. If this doc is NULL or has no root, the function will fail and return false.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
lenA pointer to receive output length in bytes (not including the null-terminator). Pass NULL if you don't need length information.
Returns
A new JSON string, or NULL if an error occurs. This string is encoded as UTF-8 with a null-terminator. When it's no longer needed, it should be freed with free().

◆ yyjson_write_file()

yyjson_api bool yyjson_write_file ( const char *  path,
const yyjson_doc doc,
yyjson_write_flag  flg,
const yyjson_alc alc,
yyjson_write_err err 
)

Write a document to JSON file with options.

This function is thread-safe when:

  1. The file is not accessed by other threads.
  2. The alc is thread-safe or NULL.
Parameters
pathThe JSON file's path. If this path is NULL or invalid, the function will fail and return false. If this file is not empty, the content will be discarded.
docThe JSON document. If this doc is NULL or has no root, the function will fail and return false.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
true if successful, false if an error occurs.
Warning
On 32-bit operating system, files larger than 2GB may fail to write.

◆ yyjson_write_fp()

yyjson_api bool yyjson_write_fp ( FILE *  fp,
const yyjson_doc doc,
yyjson_write_flag  flg,
const yyjson_alc alc,
yyjson_write_err err 
)

Write a document to file pointer with options.

Parameters
fpThe file pointer. The data will be written to the current position of the file. If this fp is NULL or invalid, the function will fail and return false.
docThe JSON document. If this doc is NULL or has no root, the function will fail and return false.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
true if successful, false if an error occurs.
Warning
On 32-bit operating system, files larger than 2GB may fail to write.

◆ yyjson_write_opts()

yyjson_api char * yyjson_write_opts ( const yyjson_doc doc,
yyjson_write_flag  flg,
const yyjson_alc alc,
size_t *  len,
yyjson_write_err err 
)

Write a document to JSON string with options.

This function is thread-safe when: The alc is thread-safe or NULL.

Parameters
docThe JSON document. If this doc is NULL or has no root, the function will fail and return false.
flgThe JSON write options. Multiple options can be combined with | operator. 0 means no options.
alcThe memory allocator used by JSON writer. Pass NULL to use the libc's default allocator.
lenA pointer to receive output length in bytes (not including the null-terminator). Pass NULL if you don't need length information.
errA pointer to receive error information. Pass NULL if you don't need error information.
Returns
A new JSON string, or NULL if an error occurs. This string is encoded as UTF-8 with a null-terminator. When it's no longer needed, it should be freed with free() or alc->free().

Variable Documentation

◆ YYJSON_PATCH_ERROR_EQUAL

const yyjson_patch_code YYJSON_PATCH_ERROR_EQUAL = 6
static

JSON patch operation test not equal.

◆ YYJSON_PATCH_ERROR_INVALID_MEMBER

const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_MEMBER = 5
static

JSON patch operation member is invalid.

◆ YYJSON_PATCH_ERROR_INVALID_OPERATION

const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_OPERATION = 3
static

JSON patch operation is not object type.

◆ YYJSON_PATCH_ERROR_INVALID_PARAMETER

const yyjson_patch_code YYJSON_PATCH_ERROR_INVALID_PARAMETER = 1
static

Invalid parameter, such as NULL input or non-array patch.

◆ YYJSON_PATCH_ERROR_MEMORY_ALLOCATION

const yyjson_patch_code YYJSON_PATCH_ERROR_MEMORY_ALLOCATION = 2
static

Memory allocation failure occurs.

◆ YYJSON_PATCH_ERROR_MISSING_KEY

const yyjson_patch_code YYJSON_PATCH_ERROR_MISSING_KEY = 4
static

JSON patch operation is missing a required key.

◆ YYJSON_PATCH_ERROR_POINTER

const yyjson_patch_code YYJSON_PATCH_ERROR_POINTER = 7
static

JSON patch operation failed on JSON pointer.

◆ YYJSON_PATCH_SUCCESS

const yyjson_patch_code YYJSON_PATCH_SUCCESS = 0
static

Success, no error.

◆ YYJSON_PTR_ERR_MEMORY_ALLOCATION

const yyjson_ptr_code YYJSON_PTR_ERR_MEMORY_ALLOCATION = 6
static

The memory allocation failed and a new value could not be created.

◆ YYJSON_PTR_ERR_NONE

const yyjson_ptr_code YYJSON_PTR_ERR_NONE = 0
static

No JSON pointer error.

◆ YYJSON_PTR_ERR_NULL_ROOT

const yyjson_ptr_code YYJSON_PTR_ERR_NULL_ROOT = 4
static

Document's root is NULL, but it is required for the function call.

◆ YYJSON_PTR_ERR_PARAMETER

const yyjson_ptr_code YYJSON_PTR_ERR_PARAMETER = 1
static

Invalid input parameter, such as NULL input.

◆ YYJSON_PTR_ERR_RESOLVE

const yyjson_ptr_code YYJSON_PTR_ERR_RESOLVE = 3
static

JSON pointer resolve failed, such as index out of range, key not found.

◆ YYJSON_PTR_ERR_SET_ROOT

const yyjson_ptr_code YYJSON_PTR_ERR_SET_ROOT = 5
static

Cannot set root as the target is not a document.

◆ YYJSON_PTR_ERR_SYNTAX

const yyjson_ptr_code YYJSON_PTR_ERR_SYNTAX = 2
static

JSON pointer syntax error, such as invalid escape, token no prefix.

◆ YYJSON_READ_ALLOW_COMMENTS

const yyjson_read_flag YYJSON_READ_ALLOW_COMMENTS = 1 << 3
static

Allow C-style single line and multiple line comments (non-standard).

◆ YYJSON_READ_ALLOW_INF_AND_NAN

const yyjson_read_flag YYJSON_READ_ALLOW_INF_AND_NAN = 1 << 4
static

Allow inf/nan number and literal, case-insensitive, such as 1e999, NaN, inf, -Infinity (non-standard).

◆ YYJSON_READ_ALLOW_INVALID_UNICODE

const yyjson_read_flag YYJSON_READ_ALLOW_INVALID_UNICODE = 1 << 6
static

Allow reading invalid unicode when parsing string values (non-standard). Invalid characters will be allowed to appear in the string values, but invalid escape sequences will still be reported as errors. This flag does not affect the performance of correctly encoded strings.

Warning
Strings in JSON values may contain incorrect encoding when this option is used, you need to handle these strings carefully to avoid security risks.

◆ YYJSON_READ_ALLOW_TRAILING_COMMAS

const yyjson_read_flag YYJSON_READ_ALLOW_TRAILING_COMMAS = 1 << 2
static

Allow single trailing comma at the end of an object or array, such as [1,2,3,], {"a":1,"b":2,} (non-standard).

◆ YYJSON_READ_BIGNUM_AS_RAW

const yyjson_read_flag YYJSON_READ_BIGNUM_AS_RAW = 1 << 7
static

Read big numbers as raw strings. These big numbers include integers that cannot be represented by int64_t and uint64_t, and floating-point numbers that cannot be represented by finite double. The flag will be overridden by YYJSON_READ_NUMBER_AS_RAW flag.

◆ YYJSON_READ_ERROR_EMPTY_CONTENT

const yyjson_read_code YYJSON_READ_ERROR_EMPTY_CONTENT = 3
static

Input JSON string is empty.

◆ YYJSON_READ_ERROR_FILE_OPEN

const yyjson_read_code YYJSON_READ_ERROR_FILE_OPEN = 12
static

Failed to open a file.

◆ YYJSON_READ_ERROR_FILE_READ

const yyjson_read_code YYJSON_READ_ERROR_FILE_READ = 13
static

Failed to read a file.

◆ YYJSON_READ_ERROR_INVALID_COMMENT

const yyjson_read_code YYJSON_READ_ERROR_INVALID_COMMENT = 8
static

Invalid comment, such as unclosed multi-line comment.

◆ YYJSON_READ_ERROR_INVALID_NUMBER

const yyjson_read_code YYJSON_READ_ERROR_INVALID_NUMBER = 9
static

Invalid number, such as 123.e12, 000.

◆ YYJSON_READ_ERROR_INVALID_PARAMETER

const yyjson_read_code YYJSON_READ_ERROR_INVALID_PARAMETER = 1
static

Invalid parameter, such as NULL input string or 0 input length.

◆ YYJSON_READ_ERROR_INVALID_STRING

const yyjson_read_code YYJSON_READ_ERROR_INVALID_STRING = 10
static

Invalid string, such as invalid escaped character inside a string.

◆ YYJSON_READ_ERROR_JSON_STRUCTURE

const yyjson_read_code YYJSON_READ_ERROR_JSON_STRUCTURE = 7
static

Invalid JSON structure, such as [1,].

◆ YYJSON_READ_ERROR_LITERAL

const yyjson_read_code YYJSON_READ_ERROR_LITERAL = 11
static

Invalid JSON literal, such as truu.

◆ YYJSON_READ_ERROR_MEMORY_ALLOCATION

const yyjson_read_code YYJSON_READ_ERROR_MEMORY_ALLOCATION = 2
static

Memory allocation failure occurs.

◆ YYJSON_READ_ERROR_UNEXPECTED_CHARACTER

const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_CHARACTER = 6
static

Unexpected character inside the document, such as [abc].

◆ YYJSON_READ_ERROR_UNEXPECTED_CONTENT

const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_CONTENT = 4
static

Unexpected content after document, such as [123]abc.

◆ YYJSON_READ_ERROR_UNEXPECTED_END

const yyjson_read_code YYJSON_READ_ERROR_UNEXPECTED_END = 5
static

Unexpected ending, such as [123.

◆ YYJSON_READ_INSITU

const yyjson_read_flag YYJSON_READ_INSITU = 1 << 0
static

Read the input data in-situ. This option allows the reader to modify and use input data to store string values, which can increase reading speed slightly. The caller should hold the input data before free the document. The input data must be padded by at least YYJSON_PADDING_SIZE bytes. For example: [1,2] should be [1,2]\0\0\0\0, input length should be 5.

◆ YYJSON_READ_NOFLAG

const yyjson_read_flag YYJSON_READ_NOFLAG = 0
static

Default option (RFC 8259 compliant):

  • Read positive integer as uint64_t.
  • Read negative integer as int64_t.
  • Read floating-point number as double with round-to-nearest mode.
  • Read integer which cannot fit in uint64_t or int64_t as double.
  • Report error if double number is infinity.
  • Report error if string contains invalid UTF-8 character or BOM.
  • Report error on trailing commas, comments, inf and nan literals.

◆ YYJSON_READ_NUMBER_AS_RAW

const yyjson_read_flag YYJSON_READ_NUMBER_AS_RAW = 1 << 5
static

Read all numbers as raw strings (value with YYJSON_TYPE_RAW type), inf/nan literal is also read as raw with ALLOW_INF_AND_NAN flag.

◆ YYJSON_READ_STOP_WHEN_DONE

const yyjson_read_flag YYJSON_READ_STOP_WHEN_DONE = 1 << 1
static

Stop when done instead of issuing an error if there's additional content after a JSON document. This option may be used to parse small pieces of JSON in larger data, such as NDJSON.

◆ YYJSON_READ_SUCCESS

const yyjson_read_code YYJSON_READ_SUCCESS = 0
static

Success, no error.

◆ YYJSON_WRITE_ALLOW_INF_AND_NAN

const yyjson_write_flag YYJSON_WRITE_ALLOW_INF_AND_NAN = 1 << 3
static

Write inf and nan number as 'Infinity' and 'NaN' literal (non-standard).

◆ YYJSON_WRITE_ALLOW_INVALID_UNICODE

const yyjson_write_flag YYJSON_WRITE_ALLOW_INVALID_UNICODE = 1 << 5
static

Allow invalid unicode when encoding string values (non-standard). Invalid characters in string value will be copied byte by byte. If YYJSON_WRITE_ESCAPE_UNICODE flag is also set, invalid character will be escaped as U+FFFD (replacement character). This flag does not affect the performance of correctly encoded strings.

◆ YYJSON_WRITE_ERROR_FILE_OPEN

const yyjson_write_code YYJSON_WRITE_ERROR_FILE_OPEN = 5
static

Failed to open a file.

◆ YYJSON_WRITE_ERROR_FILE_WRITE

const yyjson_write_code YYJSON_WRITE_ERROR_FILE_WRITE = 6
static

Failed to write a file.

◆ YYJSON_WRITE_ERROR_INVALID_PARAMETER

const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_PARAMETER = 1
static

Invalid parameter, such as NULL document.

◆ YYJSON_WRITE_ERROR_INVALID_STRING

const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_STRING = 7
static

Invalid unicode in string.

◆ YYJSON_WRITE_ERROR_INVALID_VALUE_TYPE

const yyjson_write_code YYJSON_WRITE_ERROR_INVALID_VALUE_TYPE = 3
static

Invalid value type in JSON document.

◆ YYJSON_WRITE_ERROR_MEMORY_ALLOCATION

const yyjson_write_code YYJSON_WRITE_ERROR_MEMORY_ALLOCATION = 2
static

Memory allocation failure occurs.

◆ YYJSON_WRITE_ERROR_NAN_OR_INF

const yyjson_write_code YYJSON_WRITE_ERROR_NAN_OR_INF = 4
static

NaN or Infinity number occurs.

◆ YYJSON_WRITE_ESCAPE_SLASHES

const yyjson_write_flag YYJSON_WRITE_ESCAPE_SLASHES = 1 << 2
static

Escape '/' as '\/'.

◆ YYJSON_WRITE_ESCAPE_UNICODE

const yyjson_write_flag YYJSON_WRITE_ESCAPE_UNICODE = 1 << 1
static

Escape unicode as uXXXX, make the output ASCII only.

◆ YYJSON_WRITE_INF_AND_NAN_AS_NULL

const yyjson_write_flag YYJSON_WRITE_INF_AND_NAN_AS_NULL = 1 << 4
static

Write inf and nan number as null literal. This flag will override YYJSON_WRITE_ALLOW_INF_AND_NAN flag.

◆ YYJSON_WRITE_NEWLINE_AT_END

const yyjson_write_flag YYJSON_WRITE_NEWLINE_AT_END = 1 << 7
static

Adds a newline character \n at the end of the JSON. This can be helpful for text editors or NDJSON.

◆ YYJSON_WRITE_NOFLAG

const yyjson_write_flag YYJSON_WRITE_NOFLAG = 0
static

Default option:

  • Write JSON minify.
  • Report error on inf or nan number.
  • Report error on invalid UTF-8 string.
  • Do not escape unicode or slash.

◆ YYJSON_WRITE_PRETTY

const yyjson_write_flag YYJSON_WRITE_PRETTY = 1 << 0
static

Write JSON pretty with 4 space indent.

◆ YYJSON_WRITE_PRETTY_TWO_SPACES

const yyjson_write_flag YYJSON_WRITE_PRETTY_TWO_SPACES = 1 << 6
static

Write JSON pretty with 2 space indent. This flag will override YYJSON_WRITE_PRETTY flag.

◆ YYJSON_WRITE_SUCCESS

const yyjson_write_code YYJSON_WRITE_SUCCESS = 0
static

Success, no error.