acl  3.5.3.0
acl_json.h 文件参考
+ acl_json.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

struct  ACL_JSON_NODE
 
struct  ACL_JSON
 

宏定义

#define ACL_JSON_T_A_STRING   (1 << 0)
 
#define ACL_JSON_T_A_NUMBER   (1 << 1)
 
#define ACL_JSON_T_A_BOOL   (1 << 2)
 
#define ACL_JSON_T_A_NULL   (1 << 3)
 
#define ACL_JSON_T_A_DOUBLE   (1 << 4)
 
#define ACL_JSON_T_STRING   (1 << 5)
 
#define ACL_JSON_T_NUMBER   (1 << 6)
 
#define ACL_JSON_T_BOOL   (1 << 7)
 
#define ACL_JSON_T_NULL   (1 << 8)
 
#define ACL_JSON_T_DOUBLE   (1 << 9)
 
#define ACL_JSON_T_ARRAY   (1 << 10)
 
#define ACL_JSON_T_OBJ   (1 << 11)
 
#define ACL_JSON_T_LEAF   (1 << 12)
 
#define ACL_JSON_T_MEMBER   (1 << 13)
 
#define ACL_JSON_T_PAIR   (1 << 14)
 
#define ACL_JSON_T_ELEMENT   (1 << 15)
 
#define ACL_JSON_FLAG_PART_WORD   (1 << 0)
 
#define ACL_JSON_FLAG_ADD_SPACE   (1 << 1)
 
#define acl_json_create_leaf   acl_json_create_text
 

类型定义

typedef struct ACL_JSON ACL_JSON
 
typedef struct ACL_JSON_NODE ACL_JSON_NODE
 

枚举

enum  {
  ACL_JSON_S_ROOT, ACL_JSON_S_OBJ, ACL_JSON_S_MEMBER, ACL_JSON_S_ARRAY,
  ACL_JSON_S_ELEMENT, ACL_JSON_S_PAIR, ACL_JSON_S_NEXT, ACL_JSON_S_TAG,
  ACL_JSON_S_VALUE, ACL_JSON_S_COLON, ACL_JSON_S_STRING, ACL_JSON_S_STREND
}
 

函数

ACL_API ACL_JSON_NODEacl_json_node_alloc (ACL_JSON *json)
 
ACL_API int acl_json_node_delete (ACL_JSON_NODE *node)
 
ACL_API void acl_json_node_append (ACL_JSON_NODE *node1, ACL_JSON_NODE *node2)
 
ACL_API void acl_json_node_add_child (ACL_JSON_NODE *parent, ACL_JSON_NODE *child)
 
ACL_API ACL_JSON_NODEacl_json_node_duplicate (ACL_JSON *json, ACL_JSON_NODE *from)
 
ACL_API ACL_JSON_NODEacl_json_node_parent (ACL_JSON_NODE *node)
 
ACL_API ACL_JSON_NODEacl_json_node_next (ACL_JSON_NODE *node)
 
ACL_API ACL_JSON_NODEacl_json_node_prev (ACL_JSON_NODE *node)
 
ACL_API ACL_JSONacl_json_alloc (void)
 
ACL_API ACL_JSONacl_json_dbuf_alloc (ACL_DBUF_POOL *dbuf)
 
ACL_API ACL_JSONacl_json_create (ACL_JSON_NODE *node)
 
ACL_API ACL_JSONacl_json_dbuf_create (ACL_DBUF_POOL *dbuf, ACL_JSON_NODE *node)
 
ACL_API void acl_json_foreach_init (ACL_JSON *json, ACL_JSON_NODE *node)
 
ACL_API void acl_json_free (ACL_JSON *json)
 
ACL_API void acl_json_reset (ACL_JSON *json)
 
ACL_API const char * acl_json_update (ACL_JSON *json, const char *data)
 
ACL_API int acl_json_finish (ACL_JSON *json)
 
ACL_API ACL_JSON_NODEacl_json_getFirstElementByTagName (ACL_JSON *json, const char *tag)
 
ACL_API void acl_json_free_array (ACL_ARRAY *a)
 
ACL_API ACL_ARRAYacl_json_getElementsByTagName (ACL_JSON *json, const char *tag)
 
ACL_API ACL_ARRAYacl_json_getElementsByTags (ACL_JSON *json, const char *tags)
 
ACL_API ACL_JSON_NODEacl_json_create_text (ACL_JSON *json, const char *name, const char *value)
 
ACL_API ACL_JSON_NODEacl_json_create_bool (ACL_JSON *json, const char *name, int value)
 
ACL_API ACL_JSON_NODEacl_json_create_null (ACL_JSON *json, const char *name)
 
ACL_API ACL_JSON_NODEacl_json_create_int64 (ACL_JSON *json, const char *name, acl_int64 value)
 
ACL_API ACL_JSON_NODEacl_json_create_double (ACL_JSON *json, const char *name, double value)
 
ACL_API ACL_JSON_NODEacl_json_create_array_text (ACL_JSON *json, const char *text)
 
ACL_API ACL_JSON_NODEacl_json_create_array_int64 (ACL_JSON *json, acl_int64 value)
 
ACL_API ACL_JSON_NODEacl_json_create_array_double (ACL_JSON *json, double value)
 
ACL_API ACL_JSON_NODEacl_json_create_array_bool (ACL_JSON *json, int value)
 
ACL_API ACL_JSON_NODEacl_json_create_array_null (ACL_JSON *json)
 
ACL_API ACL_JSON_NODEacl_json_create_obj (ACL_JSON *json)
 
ACL_API ACL_JSON_NODEacl_json_create_array (ACL_JSON *json)
 
ACL_API ACL_JSON_NODEacl_json_create_node (ACL_JSON *json, const char *name, ACL_JSON_NODE *value)
 
ACL_API void acl_json_node_append_child (ACL_JSON_NODE *parent, ACL_JSON_NODE *child)
 
ACL_API ACL_VSTRINGacl_json_node_build (ACL_JSON_NODE *node, ACL_VSTRING *buf)
 
ACL_API ACL_VSTRINGacl_json_build (ACL_JSON *json, ACL_VSTRING *buf)
 
ACL_API void acl_json_building (ACL_JSON *json, size_t length, int(*callback)(ACL_JSON *, ACL_VSTRING *, void *), void *ctx)
 

宏定义说明

◆ acl_json_create_leaf

#define acl_json_create_leaf   acl_json_create_text

在文件 acl_json.h305 行定义.

◆ ACL_JSON_FLAG_ADD_SPACE

#define ACL_JSON_FLAG_ADD_SPACE   (1 << 1)

创建 json 时是否添空格

在文件 acl_json.h89 行定义.

◆ ACL_JSON_FLAG_PART_WORD

#define ACL_JSON_FLAG_PART_WORD   (1 << 0)

是否兼容半个汉字

在文件 acl_json.h88 行定义.

◆ ACL_JSON_T_A_BOOL

#define ACL_JSON_T_A_BOOL   (1 << 2)

在文件 acl_json.h27 行定义.

◆ ACL_JSON_T_A_DOUBLE

#define ACL_JSON_T_A_DOUBLE   (1 << 4)

在文件 acl_json.h29 行定义.

◆ ACL_JSON_T_A_NULL

#define ACL_JSON_T_A_NULL   (1 << 3)

在文件 acl_json.h28 行定义.

◆ ACL_JSON_T_A_NUMBER

#define ACL_JSON_T_A_NUMBER   (1 << 1)

在文件 acl_json.h26 行定义.

◆ ACL_JSON_T_A_STRING

#define ACL_JSON_T_A_STRING   (1 << 0)

在文件 acl_json.h25 行定义.

◆ ACL_JSON_T_ARRAY

#define ACL_JSON_T_ARRAY   (1 << 10)

在文件 acl_json.h37 行定义.

◆ ACL_JSON_T_BOOL

#define ACL_JSON_T_BOOL   (1 << 7)

在文件 acl_json.h33 行定义.

◆ ACL_JSON_T_DOUBLE

#define ACL_JSON_T_DOUBLE   (1 << 9)

在文件 acl_json.h35 行定义.

◆ ACL_JSON_T_ELEMENT

#define ACL_JSON_T_ELEMENT   (1 << 15)

在文件 acl_json.h42 行定义.

◆ ACL_JSON_T_LEAF

#define ACL_JSON_T_LEAF   (1 << 12)

在文件 acl_json.h39 行定义.

◆ ACL_JSON_T_MEMBER

#define ACL_JSON_T_MEMBER   (1 << 13)

在文件 acl_json.h40 行定义.

◆ ACL_JSON_T_NULL

#define ACL_JSON_T_NULL   (1 << 8)

在文件 acl_json.h34 行定义.

◆ ACL_JSON_T_NUMBER

#define ACL_JSON_T_NUMBER   (1 << 6)

在文件 acl_json.h32 行定义.

◆ ACL_JSON_T_OBJ

#define ACL_JSON_T_OBJ   (1 << 11)

在文件 acl_json.h38 行定义.

◆ ACL_JSON_T_PAIR

#define ACL_JSON_T_PAIR   (1 << 14)

在文件 acl_json.h41 行定义.

◆ ACL_JSON_T_STRING

#define ACL_JSON_T_STRING   (1 << 5)

在文件 acl_json.h31 行定义.

类型定义说明

◆ ACL_JSON

typedef struct ACL_JSON ACL_JSON

在文件 acl_json.h15 行定义.

◆ ACL_JSON_NODE

typedef struct ACL_JSON_NODE ACL_JSON_NODE

在文件 acl_json.h16 行定义.

枚举类型说明

◆ anonymous enum

anonymous enum
枚举值
ACL_JSON_S_ROOT 

根节点

ACL_JSON_S_OBJ 

标签对象值

ACL_JSON_S_MEMBER 
ACL_JSON_S_ARRAY 

json 节点 array

ACL_JSON_S_ELEMENT 
ACL_JSON_S_PAIR 

name:value pair

ACL_JSON_S_NEXT 

下一个节点

ACL_JSON_S_TAG 

对象标签名

ACL_JSON_S_VALUE 

节点值处理过程

ACL_JSON_S_COLON 

冒号 :

ACL_JSON_S_STRING 
ACL_JSON_S_STREND 

在文件 acl_json.h67 行定义.

67  {
68  ACL_JSON_S_ROOT, /**< 根节点 */
69  ACL_JSON_S_OBJ, /**< 标签对象值 */
71  ACL_JSON_S_ARRAY, /**< json 节点 array */
73  ACL_JSON_S_PAIR, /**< name:value pair */
74  ACL_JSON_S_NEXT, /**< 下一个节点 */
75  ACL_JSON_S_TAG, /**< 对象标签名 */
76  ACL_JSON_S_VALUE, /**< 节点值处理过程 */
77  ACL_JSON_S_COLON, /**< 冒号 : */
80 };

函数说明

◆ acl_json_alloc()

ACL_API ACL_JSON* acl_json_alloc ( void  )

创建一个 json 对象

返回
{ACL_JSON*} 新创建的 json 对象

◆ acl_json_build()

ACL_API ACL_VSTRING* acl_json_build ( ACL_JSON json,
ACL_VSTRING buf 
)

将 json 对象转成字符串内容

参数
json{ACL_JSON*} json 对象
buf{ACL_VSTRING*} 存储结果集的缓冲区,当该参数为空时则函数内部会 自动分配一段缓冲区,应用用完后需要释放掉;非空函数内部会直接将结果存储其中
返回
{ACL_VSTRING*} json 对象转换成字符串后的存储缓冲区,该返回值永远非空, 使用者可以通过 ACL_VSTRING_LEN(x) 宏来判断内容是否为空,返回的 ACL_VSTRING 指针如果为该函数内部创建的,则用户名必须用 acl_vstring_free 进行释放

◆ acl_json_building()

ACL_API void acl_json_building ( ACL_JSON json,
size_t  length,
int(*)(ACL_JSON *, ACL_VSTRING *, void *)  callback,
void *  ctx 
)

流式 JSON 对象转字符串处理过程,即该函数在将 JSON 对象转为字符串的过程中, 一边转换一边将数据通过回调函数输出给调用者,调用者可以限定长度限定调用回 调函数的时机;该处理过程适应于当JSON对象转成的字符串非常长时(如超过100 MB), 因为采用流式转换方式,所以并不需要分配一个大内存

参数
json{ACL_JSON*} json 对象
length{size_t} 在转换为字符串的过程中如果缓冲区长度超过该长度则回调 用户设定的回调函数
callback{int (*)(ACL_JSON*, ACL_VSTRING*, void*)} 用户设定的回调 函数,当回调函数给的第二个参数为 NULL 时表示处理完毕;如果用户在该回调 的某次被调用后返回值 < 0 则停止处理过程
ctx{void*} callback 函数的最后一个参数

◆ acl_json_create()

ACL_API ACL_JSON* acl_json_create ( ACL_JSON_NODE node)

根据一个 JSON 对象的一个 JSON 节点创建一个新的 JSON 对象

参数
node{ACL_JSON_NODE*} 源 JSON 对象的一个 JSON 节点
返回
{ACL_JSON*} 新创建的 JSON 对象

◆ acl_json_create_array()

ACL_API ACL_JSON_NODE* acl_json_create_array ( ACL_JSON json)

构建 json 对象时创建 json 数组对象(即仅包含 [] 的对象)

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_array_bool()

ACL_API ACL_JSON_NODE* acl_json_create_array_bool ( ACL_JSON json,
int  value 
)

构建 json 对象的布尔节点,按 json 规范,该节点只能加入至数组对象中

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
value{int} 非 0 表示 true,否则表示 false
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_array_double()

ACL_API ACL_JSON_NODE* acl_json_create_array_double ( ACL_JSON json,
double  value 
)

构建 json 对象的数值节点,按 json 规范,该节点只能加入至数组对象中

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
value{double}
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_array_int64()

ACL_API ACL_JSON_NODE* acl_json_create_array_int64 ( ACL_JSON json,
acl_int64  value 
)

构建 json 对象的数值节点,按 json 规范,该节点只能加入至数组对象中

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
value{acl_int64}
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_array_null()

ACL_API ACL_JSON_NODE* acl_json_create_array_null ( ACL_JSON json)

构建 json 对象的 null 节点,按 json 规范,该节点只能加入至数组对象中

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_array_text()

ACL_API ACL_JSON_NODE* acl_json_create_array_text ( ACL_JSON json,
const char *  text 
)

构建 json 对象的字符串节点,按 json 规范,该节点只能加入至数组对象中

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
text{const char*}
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_bool()

ACL_API ACL_JSON_NODE* acl_json_create_bool ( ACL_JSON json,
const char *  name,
int  value 
)

构建 json 对象时创建 json 布尔类型的叶节点

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
name{const char*} 标签名,非空
value{int} 布尔类型值
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_double()

ACL_API ACL_JSON_NODE* acl_json_create_double ( ACL_JSON json,
const char *  name,
double  value 
)

构建 json 对象时创建 json double 类型的叶节点

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
name{const char*} 标签名,非空
value{double} 有符号整形值
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_int64()

ACL_API ACL_JSON_NODE* acl_json_create_int64 ( ACL_JSON json,
const char *  name,
acl_int64  value 
)

构建 json 对象时创建 json int 类型的叶节点

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
name{const char*} 标签名,非空
value{acl_int64} 有符号整形值
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_node()

ACL_API ACL_JSON_NODE* acl_json_create_node ( ACL_JSON json,
const char *  name,
ACL_JSON_NODE value 
)

构建 json 对象时创建 json 节点对象(即 tagname: ACL_JSON_NODE)

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
name{const char*} json 节点的标签名
value{ACL_JSON_NODE*} json 节点对象作为标签值
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_null()

ACL_API ACL_JSON_NODE* acl_json_create_null ( ACL_JSON json,
const char *  name 
)

构造 json 对象时创建 json null 类型的叶节点

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
name{const char*} 标签名,非空
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_obj()

ACL_API ACL_JSON_NODE* acl_json_create_obj ( ACL_JSON json)

构建 json 对象时创建 json 对象(即仅包含 {} 的对象)

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_create_text()

ACL_API ACL_JSON_NODE* acl_json_create_text ( ACL_JSON json,
const char *  name,
const char *  value 
)

构建 json 对象时创建 json 叶节点

参数
json{ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建
name{const char*} 标签名,非空
value{const char*} 标签值,非空
返回
{ACL_JSON_NODE*} 新创建的节点对象,在释放 ACL_JSON 对象时 一起被释放,所以不需要单独释放

◆ acl_json_dbuf_alloc()

ACL_API ACL_JSON* acl_json_dbuf_alloc ( ACL_DBUF_POOL dbuf)

创建一个 json 对象

参数
dbuf{ACL_DBUF_POOL*} 内存池对象,当该针对非 NULL 时,则 json 对象 及所属节点内存在其基础上进行分配,否则,内部自动创建隶属于 json 的内存池
返回
{ACL_JSON*} 新创建的 json 对象

◆ acl_json_dbuf_create()

ACL_API ACL_JSON* acl_json_dbuf_create ( ACL_DBUF_POOL dbuf,
ACL_JSON_NODE node 
)

根据一个 JSON 对象的一个 JSON 节点创建一个新的 JSON 对象

参数
dbuf{ACL_DBUF_POOL*} 内存池对象,当该针对非 NULL 时,则 json 对象 及所属节点内存在其基础上进行分配,否则,内部自动创建隶属于 json 的内存池
node{ACL_JSON_NODE*} 源 JSON 对象的一个 JSON 节点
返回
{ACL_JSON*} 新创建的 JSON 对象

◆ acl_json_finish()

ACL_API int acl_json_finish ( ACL_JSON json)

判断 JSON 解析是否完成

参数
json{ACL_JSON*} json 对象
返回
{int} 返回非 0 值表示解析完成,否则表示未完成

◆ acl_json_foreach_init()

ACL_API void acl_json_foreach_init ( ACL_JSON json,
ACL_JSON_NODE node 
)

将某一个 ACL_JSON_NODE 节点作为一个 json 对象的根节点, 从而可以方便地遍历出该节点的各级子节点(在遍历过程中的所有 节点不含本节点自身),该遍历方式有别于单独 遍历某一个 ACL_JSON_NODE 节点时仅能遍历其一级子节点的情形

参数
json{ACL_JSON*} json 对象
node{ACL_JSON_NODE*} ACL_JSON_NODE 节点

◆ acl_json_free()

ACL_API void acl_json_free ( ACL_JSON json)

释放一个 json 对象, 同时释放该对象里容纳的所有 json 节点

参数
json{ACL_JSON*} json 对象

◆ acl_json_free_array()

ACL_API void acl_json_free_array ( ACL_ARRAY a)

释放由 acl_json_getElementsByTagName, acl_json_getElementsByName, 等函数返回的动态数组对象, 因为该动态数组中的 元素都是 ACL_JSON 对象中元素的引用, 所以释放掉该动态数组后, 只要 ACL_JSON 对象不释放, 则原来存于该数组中的元素依然可以使用. 但并不释放里面的 xml 节点元素

参数
a{ACL_ARRAY*} 动态数组对象

◆ acl_json_getElementsByTagName()

ACL_API ACL_ARRAY* acl_json_getElementsByTagName ( ACL_JSON json,
const char *  tag 
)

从 json 对象中获得所有的与所给标签名相同的 json 节点的集合

参数
json{ACL_JSON*} json 对象
tag{const char*} 标签名称
返回
{ACL_ARRAY*} 符合条件的 json 节点集合, 存于 动态数组中, 若返回 NULL 则 表示没有符合条件的 json 节点, 非空值需要调用 acl_json_free_array 释放

◆ acl_json_getElementsByTags()

ACL_API ACL_ARRAY* acl_json_getElementsByTags ( ACL_JSON json,
const char *  tags 
)

从 json 对象中获得所有的与给定多级标签名相同的 json 节点的集合

参数
json{ACL_JSON*} json 对象
tags{const char*} 多级标签名,由 '/' 分隔各级标签名,如针对 json 数据: { 'root': [ 'first': { 'second': { 'third': 'test1' } }, 'first': { 'second': { 'third': 'test2' } }, 'first': { 'second': { 'third': 'test3' } } ] } 可以通过多级标签名:root/first/second/third 一次性查出所有符合条件的节点
返回
{ACL_ARRAY*} 符合条件的 json 节点集合, 存于 动态数组中, 若返回 NULL 则 表示没有符合条件的 json 节点, 非空值需要调用 acl_json_free_array 释放

◆ acl_json_getFirstElementByTagName()

ACL_API ACL_JSON_NODE* acl_json_getFirstElementByTagName ( ACL_JSON json,
const char *  tag 
)

从 json 对象中获得第一个与所给标签名相同的 json 节点

参数
json{ACL_JSON*} json 对象
tag{const char*} 标签名称
返回
{ACL_JSON_NODE*} 符合条件的 json 节点, 若返回 NULL 则 表示没有符合条件的 json 节点

◆ acl_json_node_add_child()

ACL_API void acl_json_node_add_child ( ACL_JSON_NODE parent,
ACL_JSON_NODE child 
)

将某个 json 节点作为子节点加入某父 json 节点中

参数
parent{ACL_JSON_NODE*} 父节点
child{ACL_JSON_NODE*} 子节点

◆ acl_json_node_alloc()

ACL_API ACL_JSON_NODE* acl_json_node_alloc ( ACL_JSON json)

创建一个 json 节点

参数
json{ACL_JSON*} json 对象
返回
{ACL_JSON_NODE*} json 节点对象

◆ acl_json_node_append()

ACL_API void acl_json_node_append ( ACL_JSON_NODE node1,
ACL_JSON_NODE node2 
)

向某个 json 节点添加兄弟节点(该兄弟节点必须是独立的 json 节点)

参数
node1{ACL_JSON_NODE*} 向本节点添加 json 节点
node2{ACL_JSON_NODE*} 新添加的兄弟 json 节点

◆ acl_json_node_append_child()

ACL_API void acl_json_node_append_child ( ACL_JSON_NODE parent,
ACL_JSON_NODE child 
)

构建 json 对象时,向一个由 acl_json_create_obj 或 acl_json_create_array 创建的 json 节点添加子节点,该子节点可以是由如下接口创建的节点: acl_json_create_leaf, acl_json_create_obj, acl_json_create_array

◆ acl_json_node_build()

ACL_API ACL_VSTRING* acl_json_node_build ( ACL_JSON_NODE node,
ACL_VSTRING buf 
)

将 json 对象的一个 JSON 节点转成字符串内容

参数
node{ACL_JSON_NODE*} json 节点对象
buf{ACL_VSTRING*} 存储结果集的缓冲区,当该参数为空时则函数内部会 自动分配一段缓冲区,应用用完后需要释放掉;非空函数内部会直接将结果存储其中
返回
{ACL_VSTRING*} json 节点对象转换成字符串后的存储缓冲区, 该返回值永远非空,使用者可以通过 ACL_VSTRING_LEN(x) 宏来判断内容是否为空, 返回的 ACL_VSTRING 指针如果为该函数内部创建的,则用户名必须用 acl_vstring_free 进行释放

◆ acl_json_node_delete()

ACL_API int acl_json_node_delete ( ACL_JSON_NODE node)

将某个 json 节点及其子节点从 json 对象中删除, 并释放该节点及其子节点 所占空间函数来释放该 json 节点所占内存

参数
node{ACL_JSON_NODE*} json 节点
返回
{int} 返回删除的节点个数

◆ acl_json_node_duplicate()

ACL_API ACL_JSON_NODE* acl_json_node_duplicate ( ACL_JSON json,
ACL_JSON_NODE from 
)

将一个 JSON 对象的 JSON 节点复制至 JSON 对象中的一个 JSON 节点中,并返回 目标新创建的 JSON 节点

参数
json{ACL_JSON*} 目标 JSON 对象
from{ACL_JSON_NODE*} 源 JSON 对象的一个 JSON 节点
返回
{ACL_JSON_NODE*} 返回非空对象指针

◆ acl_json_node_next()

ACL_API ACL_JSON_NODE* acl_json_node_next ( ACL_JSON_NODE node)

获得某个 json 节点的后一个兄弟节点

参数
node{ACL_JSON_NODE*} json 节点
返回
{ACL_JSON_NODE*} 给定 json 节点的后一个兄弟节点, 若为NULL则表示不存在

◆ acl_json_node_parent()

ACL_API ACL_JSON_NODE* acl_json_node_parent ( ACL_JSON_NODE node)

获得某个 json 节点的父节点

参数
node{ACL_JSON_NODE*} json 节点
返回
{ACL_JSON_NODE*} 父节点, 如果为 NULL 则表示其父节点不存在

◆ acl_json_node_prev()

ACL_API ACL_JSON_NODE* acl_json_node_prev ( ACL_JSON_NODE node)

获得某个 json 节点的前一个兄弟节点

参数
node{ACL_JSON_NODE*} json 节点
返回
{ACL_JSON_NODE*} 给定 json 节点的前一个兄弟节点, 若为NULL则表示不存在

◆ acl_json_reset()

ACL_API void acl_json_reset ( ACL_JSON json)

重置 json 解析器对象

参数
json{ACL_JSON*} json 对象

◆ acl_json_update()

ACL_API const char* acl_json_update ( ACL_JSON json,
const char *  data 
)

解析 json 数据, 并持续地自动生成 json 节点树

参数
json{ACL_JSON*} json 对象
data{const char*} 以 '\0' 结尾的数据字符串, 可以是完整的 json 数据; 也可以是不完整的 json 数据, 允许循环调用此函数, 将不完整数据持续地输入; 该参数 若为 NULL,则直接返回空串地址,因此禁止为 NULL
返回
{const char*} 当解析结束后,该返回值表示剩余数据的指针地址