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這個函數來替換!!!