随着物联网的发展,越来越多的物需要连接网络上传数据,服务器同时需要对接多种类型的终端,协议的多样性是加大服务器端复杂度的一个重要方面,同时也加大了维护复杂度,经过权衡终端最终采用了json数据格式。
使用的理由:
1、标准 主流的语言都是支持json,方便 终端和服务器的解析
2、扩展性好
3、易于维护
缺点:
比二进制的数据类型占用的带宽要大
使用方法:
1、下载
https://sourceforge.net/projects/cjson/
官方项目中有测试包 及使用教程
2、将cjson包 包含到项目中 #include "cJSON.h"
3、注意cjson 源文件中的 malloc 和free方法的替换
void cJSON_InitHooks(cJSON_Hooks* hooks)
{
if (!hooks) { /* Reset hooks */
cJSON_malloc = vm_malloc;
cJSON_free = vm_free;
return;
}
cJSON_malloc = (hooks->malloc_fn)?hooks->malloc_fn:vm_malloc;
cJSON_free = (hooks->free_fn)?hooks->free_fn:vm_free;
}
我使用的是 vm_malloc 和 vm_free 所以替换成我自己的方法了
4、json转字符串后,在字符串使用完之后要释放 因为char* 是使用malloc创建的内存空间
out = cJSON_Print(root); 或 out = cJSON_PrintUnformatted(root); 在out使用之后 要手动释放 否则会导致内存泄露
5、同理,字符串转json之后 在json使用完后要 调用 cJSON_Delete()释放json对象,因为json数是使用malloc创建的内存空间 如:
json = cJSON_Parse((char*)readBuf); 使用后要 cJSON_Delete(json );
6、常用的函数在网上都能找到
创建 和 取值