linux cJson庫使用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章