cjson 注意事项

1.零字符
cJSON不支持字符串包含零字符,如‘\0'或\u0000。这是不可能出现的,因为字符串是以0结尾的。
2.字符编码
cJSON只支持UTF-8编码输入。在大多数情况下,它不会拒绝无效的UTF-8,它只是按原样传递。只要输入不包含无效的UTF-8,输出将始终是有效的UTF-8。
3.C标准
cJSON是使用ANSI C(or C89, C90)编写的。如果你的编译器和C库不遵循此标准,将无法确保正确的行为。
ANSI C不是C++,因此它不应被C++编译器编译。你可以使用C编译器编译它,然后链接到你的C++代码。尽管C++编译的代码能工作,但无法保证正确的行为。
4.浮点数
cJSON不正式支持doubleIEEE754双精度浮点数以外的任何实现。它可能仍然适用于其他实现,但这些错误将被视为无效
cJSON支持的浮点文字的最大长度目前为63个字符。
5.数组和对象的深度嵌套
cJSON不支持嵌套太深的数组和对象,因为这会导致堆栈溢出。为了防止此cJSON默认限制深度CJSON_NESTING_LIMIT为1000,但可以在编译时更改。
6.线程安全
    通常,cJSON不是线程安全的。但在以下情况下是线程安全的。
    1 cJSON_GetErrorPtr 没有被调用过。可使用cJSON_ParseWithOpts 的参数return_parse_end 替代。
    2 cJSON_InitHooks 仅仅在任何线程使用cJSON之前调用。
    3 setlocale不在所有的cJSON函数返回前被调用。
7.区分大小写
最初创建cJSON时,它未遵循JSON标准,并未区分大小写字母。如果您需要正确的,符合标准的行为,则需要使用CaseSensitive可用的功能。
8.重复对象成员
 cJSON支持解析和打印包含具有多个具有相同名称的成员的对象的JSON。cJSON_GetObjectItemCaseSensitive但总是只返回第一个。
补充:
(1)使用cJSON_Parse创建一个 cJSON指针后,用完务必 使用 cJSON_Delete函数释放 该cJSON指针。

(2)使用cJSON_Createxxx函数创建 json对象后, 用完务必使用 cJSON_Delete函数释放 该cJSON指针。

(3)使用 cJSON_Print函数 将cJSON数据 解析成 char 字符串后,务必使用 cJSON_free函数释放 该char指针,
这个 细节隐藏的很深,因为cJSON_Print 函数不光是 print打印,他会 调用cJSON_malloc 申请内存,所以用完 必须要释放 掉 该char 指针。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值