acl
3.5.3.0
|
#include "../stdlib/acl_define.h"
#include "../stdlib/acl_dbuf_pool.h"
#include "../stdlib/acl_iterator.h"
#include "../stdlib/acl_vstring.h"
#include "../stdlib/acl_ring.h"
#include "../stdlib/acl_array.h"
类 | |
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 |
#define acl_json_create_leaf acl_json_create_text |
在文件 acl_json.h 第 305 行定义.
#define ACL_JSON_FLAG_ADD_SPACE (1 << 1) |
创建 json 时是否添空格
在文件 acl_json.h 第 89 行定义.
#define ACL_JSON_FLAG_PART_WORD (1 << 0) |
是否兼容半个汉字
在文件 acl_json.h 第 88 行定义.
#define ACL_JSON_T_A_BOOL (1 << 2) |
在文件 acl_json.h 第 27 行定义.
#define ACL_JSON_T_A_DOUBLE (1 << 4) |
在文件 acl_json.h 第 29 行定义.
#define ACL_JSON_T_A_NULL (1 << 3) |
在文件 acl_json.h 第 28 行定义.
#define ACL_JSON_T_A_NUMBER (1 << 1) |
在文件 acl_json.h 第 26 行定义.
#define ACL_JSON_T_A_STRING (1 << 0) |
在文件 acl_json.h 第 25 行定义.
#define ACL_JSON_T_ARRAY (1 << 10) |
在文件 acl_json.h 第 37 行定义.
#define ACL_JSON_T_BOOL (1 << 7) |
在文件 acl_json.h 第 33 行定义.
#define ACL_JSON_T_DOUBLE (1 << 9) |
在文件 acl_json.h 第 35 行定义.
#define ACL_JSON_T_ELEMENT (1 << 15) |
在文件 acl_json.h 第 42 行定义.
#define ACL_JSON_T_LEAF (1 << 12) |
在文件 acl_json.h 第 39 行定义.
#define ACL_JSON_T_MEMBER (1 << 13) |
在文件 acl_json.h 第 40 行定义.
#define ACL_JSON_T_NULL (1 << 8) |
在文件 acl_json.h 第 34 行定义.
#define ACL_JSON_T_NUMBER (1 << 6) |
在文件 acl_json.h 第 32 行定义.
#define ACL_JSON_T_OBJ (1 << 11) |
在文件 acl_json.h 第 38 行定义.
#define ACL_JSON_T_PAIR (1 << 14) |
在文件 acl_json.h 第 41 行定义.
#define ACL_JSON_T_STRING (1 << 5) |
在文件 acl_json.h 第 31 行定义.
在文件 acl_json.h 第 15 行定义.
typedef struct ACL_JSON_NODE ACL_JSON_NODE |
在文件 acl_json.h 第 16 行定义.
anonymous enum |
在文件 acl_json.h 第 67 行定义.
ACL_API ACL_JSON* acl_json_alloc | ( | void | ) |
创建一个 json 对象
ACL_API ACL_VSTRING* acl_json_build | ( | ACL_JSON * | json, |
ACL_VSTRING * | buf | ||
) |
将 json 对象转成字符串内容
json | {ACL_JSON*} json 对象 |
buf | {ACL_VSTRING*} 存储结果集的缓冲区,当该参数为空时则函数内部会 自动分配一段缓冲区,应用用完后需要释放掉;非空函数内部会直接将结果存储其中 |
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_API ACL_JSON* acl_json_create | ( | ACL_JSON_NODE * | node | ) |
根据一个 JSON 对象的一个 JSON 节点创建一个新的 JSON 对象
node | {ACL_JSON_NODE*} 源 JSON 对象的一个 JSON 节点 |
ACL_API ACL_JSON_NODE* acl_json_create_array | ( | ACL_JSON * | json | ) |
构建 json 对象时创建 json 数组对象(即仅包含 [] 的对象)
json | {ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建 |
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_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_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_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_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_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_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_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_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_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_API ACL_JSON_NODE* acl_json_create_obj | ( | ACL_JSON * | json | ) |
构建 json 对象时创建 json 对象(即仅包含 {} 的对象)
json | {ACL_JSON*} 由 acl_json_alloc / acl_json_alloc1 创建 |
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_API ACL_JSON* acl_json_dbuf_alloc | ( | ACL_DBUF_POOL * | dbuf | ) |
创建一个 json 对象
dbuf | {ACL_DBUF_POOL*} 内存池对象,当该针对非 NULL 时,则 json 对象 及所属节点内存在其基础上进行分配,否则,内部自动创建隶属于 json 的内存池 |
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_API int acl_json_finish | ( | ACL_JSON * | json | ) |
判断 JSON 解析是否完成
json | {ACL_JSON*} json 对象 |
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_API void acl_json_free | ( | ACL_JSON * | json | ) |
释放一个 json 对象, 同时释放该对象里容纳的所有 json 节点
json | {ACL_JSON*} json 对象 |
ACL_API void acl_json_free_array | ( | ACL_ARRAY * | a | ) |
从 json 对象中获得所有的与所给标签名相同的 json 节点的集合
json | {ACL_JSON*} json 对象 |
tag | {const char*} 标签名称 |
从 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_API ACL_JSON_NODE* acl_json_getFirstElementByTagName | ( | ACL_JSON * | json, |
const char * | tag | ||
) |
从 json 对象中获得第一个与所给标签名相同的 json 节点
json | {ACL_JSON*} json 对象 |
tag | {const char*} 标签名称 |
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_API ACL_JSON_NODE* acl_json_node_alloc | ( | ACL_JSON * | json | ) |
创建一个 json 节点
json | {ACL_JSON*} json 对象 |
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_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_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_API int acl_json_node_delete | ( | ACL_JSON_NODE * | node | ) |
将某个 json 节点及其子节点从 json 对象中删除, 并释放该节点及其子节点 所占空间函数来释放该 json 节点所占内存
node | {ACL_JSON_NODE*} json 节点 |
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_API ACL_JSON_NODE* acl_json_node_next | ( | ACL_JSON_NODE * | node | ) |
获得某个 json 节点的后一个兄弟节点
node | {ACL_JSON_NODE*} json 节点 |
ACL_API ACL_JSON_NODE* acl_json_node_parent | ( | ACL_JSON_NODE * | node | ) |
获得某个 json 节点的父节点
node | {ACL_JSON_NODE*} json 节点 |
ACL_API ACL_JSON_NODE* acl_json_node_prev | ( | ACL_JSON_NODE * | node | ) |
获得某个 json 节点的前一个兄弟节点
node | {ACL_JSON_NODE*} json 节点 |
ACL_API void acl_json_reset | ( | ACL_JSON * | json | ) |
重置 json 解析器对象
json | {ACL_JSON*} json 对象 |
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 |