1、cJSon库的好处
在c语言里用到json格式的字符串,拼接起来就很麻烦,如果数据大,需要申请空间,如果中间要再插入一个子项,还需要麻烦的拷贝拼接。
用cJSon库的好处就是:
1、拼接、插入方便。临时增加,修改,直接用对于的接口来实现,快速,方便。
2、空间申请问题由接口底层去实现。如果拼接很多,内存问题我们不用去过多考虑,只要知道怎么用就可以避免内存泄露问题。
3、格式统一。书写方便,可能有些地方会加中括号,有些没有。用这个可以省掉这种麻烦。
4、使用拓展方便。需要临时增加,或者再加入内容,比较便捷,高效。不用再自己用一大串的转义符加双引号来拼接了。
2、下载库
链接: https://pan.baidu.com/s/1PJp3EqALizUpzDb5xT4loQ
提取码: ye5g
包含测试代码
3、使用
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main()
{
cJSON * root = cJSON_CreateObject();
cJSON * item = cJSON_CreateObject();
cJSON * sub_item = cJSON_CreateObject();
cJSON_AddItemToObject(root, "root", cJSON_CreateNumber(0));//根节点下添加
cJSON_AddItemToObject(root, "name", cJSON_CreateString("chz"));
cJSON_AddItemToObject(root, "age", cJSON_CreateString("18"));
cJSON_AddItemToObject(root, "profession", cJSON_CreateString("programmer"));
cJSON_AddItemToObject(root, "ability", item);//root节点下添加节点ability
cJSON_AddItemToObject(item, "sports", sub_item);//在ability节点下添加sports节点
cJSON_AddItemToObject(sub_item, "baskeball", cJSON_CreateString("Point Guard"));//添加节点
printf("%s\n", cJSON_Print(root));
printf("%s\n", cJSON_PrintUnformatted(root));
return 0;
}
有添加子节点就有删除子节点,还有对应的更改子节点。
CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
仔细阅读一下cJSon.h文件。
github上面也有未编译版的cJson,可以自行下载看看
https://github.com/DaveGamble/cJSON
4、简单性能测试
一直在担心不断地添加子项会不会加大内存开销。于是做了个小实验。
每隔1秒去添加,然后top 查看mem项是否加大。几分钟后发现mem增大到1.3!
所以要特别注意使用cJSON_AddItemToObject
测试代码从百度网盘下载
那该怎么优化?
每次添加一个Item前先delete掉一个。或者就直接采用cJSON_ReplaceItemInObject这个函数来替换!!!