cJSON 庫的使用和優化

2021-09-09 05:30:02 字數 1888 閱讀 9244

部門的產品使用自己公司研發的系統,嵌入式web伺服器移植的是goahead2.5的,伺服器和前端使用json互動,移植的cjson庫,所以這段時間對json的使用做個簡單的筆記,cjson.h提供出來的介面很多,但是感覺平時使用的也就那麼幾個。

在做測試的時候,通過建立json物件,新增節點,然後儲存,讀取,輸出這樣的乙個流程,發現當新增節點數多的時候,會會出現長時間的等待,當時好像是一萬行的資料量,整個建立過程花費了2,3秒鐘,所以當更多資料量的時候,花費的時間可能更長。最後發現是這個函式導致的結果,原始碼如下,可以看到它每新增乙個item,都是從頭往後找,等找到最後乙個節點的時候,然後把item賦值給最後乙個節點的next,所以節點越多,時間也就更長了。

void   cjson_additemtoarray(cjson *array, cjson *item)

void   cjson_additemtoarray(cjson *array, cjson *item)

else

}

檢視cjson的結構體,會發現,json結構有next和pre兩個指標,也就是它的鍊錶是個雙向鍊錶,但是就奇怪為何找節點卻不用這個優點,非得單向去找。

typedef struct cjson  cjson;

所以解決的思路就在這了,有兩種方式解決:

1,利用array的pre指標,每次插入item後,同時將其指標儲存在array->child->pre中,這樣我每次插入節點,都只需要找到第乙個節點的pre指標,然後將item插到該位址之後,即可。

cjson * c = array->child;

if(!item)

if(!c)

else

2,第二種方式就很簡單,通過修改json結構體實現目的,在結構體中新增乙個成員 struct cjson * last;每次新增item的時候,同時將它的指標賦值給array->child->last;

這樣每次新增的時候,只需要查詢last指標就可以找到最後乙個節點。

cjson * c = array->child;

if(!item)

if(!c)

else

用的最多的object物件就是這些了。

#define cjson_addnulltoobject(object,name) 

#define cjson_addtruetoobject(object,name) 

#define cjson_addfalsetoobject(object,name) 

#define cjson_addbooltoobject(object,name,b)

#define cjson_addnumbertoobject(object,name,n) 

#define cjson_addstringtoobject(object,name,s) 

還有陣列物件

void cjson_additemtoarray(cjson *array, cjson *item);

void cjson_additemtoobject(cjson *object,const char *string,cjson *item);

如果是將乙個陣列新增進物件就可以用

void cjson_additemreferencetoarray(cjson *array, cjson *item);

當用完json物件時候,就必須記者刪除 

cjson_delete(cjson*);

將乙個字串解析成json物件

extern cjson *cjson_parse(const char *value);

將乙個json物件轉換成char *,但是這個字串必須是手動刪除

extern char  *cjson_print(cjson *item);

cJSON庫的使用(一)

在c語言裡用到json格式的字串,拼接起來就很麻煩,如果資料大,需要申請空間,如果中間要再插入乙個子項,還需要麻煩的拷貝拼接。用cjson庫的好處就是 1 拼接 插入方便。臨時增加,修改,直接用對於的介面來實現,快速,方便。2 空間申請問題由介面底層去實現。如果拼接很多,記憶體問題我們不用去過多考慮...

linux下使用C Json庫

3 解壓scons 2.1.0.tar.gz tar zvxf scons 2.1.0.tar.gz 我的解壓到了 opt json scons 2.1.0目錄下了 4 進入到解壓目錄scons 2.1.0下面,執行命令 sudo python setup.py install 5 解壓jsconc...

linux下使用C Json庫

安裝json庫 3 解壓scons 2.1.0.tar.gz tar zvxf scons 2.1.0.tar.gz 我的解壓到了 opt json scons 2.1.0目錄下了 4 進入到解壓目錄scons 2.1.0下面,執行命令 sudo python setup.py install 5 ...