jansson api 接口

用c语言数据结构描述的jansson数据类型,这数据类型用来表示这个JSON值的类型:
json_t
这个数据类型在数据库中用来表示所有的JSON值。该结构有该JSON值的类型和该值的引用计数组成。json_t的对象总是通过指针使用的。jansson提供用于查询JSON值类型、操作引用计数以及构造和操作不同类型值的API接口。

JSON值类型:
JSON定义了以下类型:
JSON_OBJECT : 对象
JSON_ARRAY: 数组
JSON_STRING: 字符串
JSON_INTEGER: 整型数字
JSON_REAL: 实型数字
JSON_TRUE: bool真
JSON_FALSE: bool假
JSON_NULL: 空
int json_typeof(const json_t *json) 返回json值的类,参数json不能为空(NULL)

json_is_object (const json_t *json)
json_is_array(const json_t *json)
json_is_string(const json_t *json)
json_is_integer(const json_t *json)
json_is_real(const json_t *json)¶
json_is_true(const json_t *json)
json_is_false(const json_t *json)
json_is_null(const json_t *json)
以上函数用于判断json值的类型,若是给的类型则返回真,否则返回假,参数json为空指针也返回假

json_is_number(const json_t *json)
若json值为JSON_INTEGER或JSON_REAL类型返回真,否则返回假,参数json为空指针也返回假
json_is_boolean(const json_t *json)
若json值为JSON_TRUE或JSON_FALSE类型返回真,否则返回假,参数json为空指针也返回假

引用计数(reference count):
引用计数用于跟踪某个值是否仍在使用。创建值时,其引用计数设置为1。如果保留对某个值的引用(例如,将某个值存储在某个位置以供以后使用),则该值的引用计数将递增,当不再需要该值时,该引用计数将递减。当引用计数降至零时,就没有剩余的引用,并且可以销毁该值。

json_t *json_incref(json_t *json)
增加json的引用计数(参数json不能为空)、
void json_decref(json_t *json)
减少json的引用计数。一旦调用 json_decref将引用计数减至0,该json值就被销毁,并且不能再次使用。

创建新的JSON值的函数将引用计数设置为1,这些函数返回一个引用计数。其他返回一个已存在的JSON值的函数通常不会增加引用计数的值,因此在使用这些函数时必须调用json_incref函数来增加引用计数的值。一旦不需要该JSON值,就应该调用json_decref函数来释放引用计数。
通常接受JSON值作为参数的函数,都需要根据需要增加或者减少引用计数的值。但是函数名带有_new或者函数名后缀为_new的,在调用函数后,会自行增加或减少引用计数。
例如下列创建一个数组JSON,并且向该数组型JSON追加一个整数型JSON

  json_t *array, *integer;
    array = json_array();
    integer = json_integer(42);
    json_array_append(array, integer);
    json_decref(integer);

此处需要自行调用json_decref来释放integer的引用计数

json_t *array = json_array();
json_array_append_new(array, json_integer(42));

用户不必显式释放对整数值的引用,因为json_array_append_new()在将值附加到数组时会窃取引用(即自动处理JSON参数的引用计数)

循环引用:
当一个对象型或数组型JSON直接或间接插入到其自己内部时,就会创建一个循环引用。

json_t *obj = json_object();
json_object_set(obj, "foo", obj);

这是直接循环引用,Jansson将拒绝执行此操作,json_object_set()(以及对象和数组的所有其他此类函数)将返回错误状态。间接循环无法检测,但是是危险的。

json_t *arr1 = json_array(), *arr2 = json_array();
json_array_append(arr1, arr2);
json_array_append(arr2, arr1);

在本例中,数组arr2包含在数组arr1中,反之亦然。如果不影响性能,Jansson就无法检查这种间接循环引用,因此由用户来避免它们。
如果创建了循环引用,则json_decref()无法释放值所消耗的内存。引用计数永远不会降为零,因为值会保持彼此的引用。此外,尝试使用任何编码函数对值进行编码都将失败。编码器检测循环引用并返回错误状态。

TRUE ,FALSE and Null
这些值是作为个体使用的,因此这些函数每次都返回相同的值
json_t *json_true(void)
返回ftrue型JSON,新的引用计数

json_t *json_false(void)¶
返回false型JSON,新的引用计数

json_t *json_null(void)
返回null型JSON,新的引用计数 .

string
jansson使用UTF-8作为字符编码。所有JSON字符串必须是有效的UTF-8(或ASCII,因为它是UTF-8的子集)。使用普通的以空结尾的C字符串,因此JSON字符串不能包含嵌入的空字符
**json_t json_string(const char value)
返回新的JSON型的字符串,或出错时返回空值。参数必须是有效的UTF-8编码的Unicode字符串

**json_t json_string_nocheck(const char value)
类似于json_string不检查该值是否为有效的UTF-8。仅当您确定确实如此时才使用此函数

const char *json_string_value(const json_t *string)
返回一个以null结尾的utf-8编码的字符串的指针,如果不是字符串型json则返回null
返回值只读,不能修改也不能释放。只要引用计数没有降到0,返回值一直有效

int json_string_set(const json_t *string, const char *value)
将string型的关联值设置为value的内容,value的内容必须是有效的UTF-8编码的Unicode字符串,成功返回0,失败返回-1或error

int json_string_set_nocheck(const json_t *string, const char *value) 不验证value的内容格式

Number(整型和浮点型)
json_int_t
这是用于存储JSON整数值的C类型。它表示系统上可用的最宽整数类型。实际上,如果编译器支持它,那么它只是一个long long的typedef,否则就是long.
通常,您可以安全地使用int代替json_int_t,而隐式C整数转换处理其余的部分。只有当您知道需要完整的64位范围时,才应该显式地使用json_int_t。
JSON_INTEGER_IS_LONG_LONG是个预处理器,如果json_int_t是long long型其值为1,如果json-int_t代表long型,则其值为0

JSON_INTEGER_FORMAT
json_int_t在pr

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值