大佬教程收集整理的这篇文章主要介绍了cJSON,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
优点:cJSON只有cJSON.h和cJSON.c两个文件、600行代码可以直接加到工程项目中,不必编译成库使用。
结论:优先使用cJSON
cJSON结构:
/* The cJSON structure: */ typedef struct cJSON { struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively,use GetArraySize/GetArrayItem/GetObjectItem */ struct cJSON *child; /* An array or object item will have a child pointer poinTing to a chain of the items in the array/object. */ int type; /* The type of the item,as above. */ char *valueString; /* The item's String,if type==cJSON_String */ int valueint; /* The item's number,if type==cJSON_number */ double valuedouble; /* The item's number,if type==cJSON_number */ char *String; /* The item's name String,if this item is the child of,or is in the list of subitems of an object. */ } cJSON;
使用过程:
1.创建
cJSON *cjson = cJSON_CreateObject(); //创建一个对象节点 cJSON *cjson = cJSON_CreateArrary(); //创建一个数组 cJSON *cjson = cJSON_CreateString(const char *ch); //创建一个字符串类型的节点,保存ch cJSON *cjson = cJSON_Createnumber(double n); //创建一个数字类型的节点,保存n,不分整数和浮点数 ...
cJSON_CreateXXX内部使用malloc分配动态内存,使用完后一定调用
2.解析
char *ch = "{\"name\":\"rongxiaojun\",\"object\":[\"xys\",\"hdm\",\"qinxiaohui,my friend\",\"songtao,laji\"]}"; cJSON *cjson = cJSON_Parse(ch);
温馨提示:
a.若字符串格式不符合规范,cJSON_Parse返回0
b.使用完后使用cJSON_delete(cjson)进行空间释放
3.输出
char* ch = cJSON_Print(cJSON *cjson);
内部用malloc为ch分配了空间,所以使用完后需free(ch)
4.取节点
4.1对象节点
//取cjson中名字为"name"的子节点,故cj->String = "name" cJSON *cj = cJSON_GetObjectItem(cjson,"name");
4.2数组节点
//从cjson数组取第n个元素(数组元素也为节点) cJSON *cj = cJSON_GetArrayItem(cjson,n);
温馨提示:字段不存在均返回0
5.取值
char *ch = cjson->valueString; int n = cjson->valueint; double d = cjson->valuedouble;
6.取节点名字
char *ch = cj->String;
注意:取名操作通常用于子节点,因为顶级节点没名所以对顶级节点取名会出错
7.添加节点
7.1 添加普通对象节点
cJSON_AddStringToObject(cjson,"name","rongxiaojun"); cJSON_AddnumberToObject(cjson,n);
7.2 添加数组节点
cJSON_AddItemToArray(cj,cJSON_CreateString("shilaji")); cJSON_AddItemToArray(cj,cJSON_Createnumber(n));
温馨提示:cJSON在添加数字时不区分整数和浮点数,该值被同时赋给cjson->valueint和cjson->valuedouble,用户根据需要取出对应值
8. 删除节点
8.1 删除普通对象节点
删除key为name的节点
cJSON_deleteItemFromObject(cjson,"name");
8.2 删除数组节点
删除数组中第2个元素
cJSON_deleteItemFromArray(cjson,2);温馨提示:cJSON_deleteItemFrom*函数在删除节点时内存即清理,故不存在内存泄露问题,可放心使用。
9.数组
9.1 取数组个数
int num =cJSON_GetArraySize(cj);
9.2 取节点
/*从cjson数组取第n个元素(数组元素也为节点)*/ cJSON *cj = cJSON_GetArrayItem(cjson,n); //不存在返回0
9.3 添加节点
cJSON_AddItemToArray(cj,cJSON_CreateString("shilaji")); cJSON_AddItemToArray(cj,cJSON_Createnumber(n));
示例
cJSON *cjson = cJSON_CreateArray(); cJSON_AddItemToArray(cjson,cJSON_CreateString("123456")); cJSON_AddItemToArray(cjson,cJSON_CreateString("nihaihaoma")); cJSON_AddItemToArray(cjson,cJSON_CreateString("jintianxingqiwule")); int iCnt = cJSON_GetArraySize(cjson); for(int i = 0; i != iCnt; ++i) printf("%s\n",cJSON_GetArrayItem(cjson,i)->valueString);结果
10.验证字段存在
if(cJSON_GetObjectItem(cjson,str.c_str()) == NULL) return false; else return true;
11.bool操作
a.添加:cJSON_AddBoolToObject(cjson,flag);
b.读取:bool bRes = cJSON_GetObjectItem(cjson,"name")->type;
以上是大佬教程为你收集整理的cJSON全部内容,希望文章能够帮你解决cJSON所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。