cJSON的讀寫與個人理解

2021-10-08 15:42:36 字數 2299 閱讀 1423

寫cjson

/*

## 輸出到檔案流 即從記憶體到硬碟

@filename 檔案路徑

@ std::ios::out | std::ios::trunc 開啟檔案的方式

@ 這些識別符號可以被組合使用,中間以」或」操作符(|)間隔。

*/std::ofstream ofs(filename.tolocal8bit().constdata(), std::ios::out | std::ios::trunc);

if (!ofs.good())

return;

/*@ jsonobj 這個cjson一定要完全同名,原因是cjson的巨集要直接引用它,具體可以檢視標頭檔案的巨集定義

*/std::shared_ptridx(cjson_createobject(), cjson_delete);

cjson* jsonobj = idx.get();

/*@ v 變數名 最後儲存到cjson時將成為 欄位名即key

@ 實際上cjson的資料儲存方式可以理解為多層次()巢狀的鍵值對的集合 ,)>

*///double型 int string bool同理

double *v=0.01;

json_doubl_set(v);

//double 陣列 其他同理

double *array = array[n];

json_doublearray_set(array, n);

/*## 字串列表 其他型別的list同理

## 只需將cjson_createstring 換成同作用的函式

@ yourlist 為qstringlist

*/cjson *list = cjson_createarray();

for (const qstring str : yourlist)

cjson_additemtoobject(jsonobj, "list", list);

//完成cjson物件後,將jsonobj的內容轉換成char*,輸出到檔案

char* idx_txt = cjson_print(jsonobj);

ofs << idx_txt;

ofs.close();

free(idx_txt);

讀cjson

/*

@idx_input 暫存cjson檔案的內容,即從硬碟到記憶體

@len cjson檔案的內容的大小

@至於為什麼要 多存乙個 '\0',我理解為cjson的結束符(未經證實,純屬猜測)

*/std::vectoridx_input;

qint64 len = qfileinfo(filename).size();

idx_input.resize(len + 1);

std::ifstream ifs(filename.tolocal8bit().constdata(), std::ios::in);

if (!ifs.good())

return;

ifs.read(&(idx_input.front()), len);

idx_input.back() = '\0';

ifs.close();

std::shared_ptridx(cjson_parse(&(idx_input.front())), cjson_delete);

cjson* jsonobj = idx.get();

if (!jsonobj)

return;

//讀key為v的vlue int bool double string同理

cjson* v = cjson_getobjectitem(jsonobj, "v");

if (v)

yourv = v->valueint);

else

return false;

//也可以

int v=0;

json_int_get(v);

/*## 陣列 list 讀取方式類似

@ list 從父物件jsonobj裡找到key為"list"的鍵值對的位址賦值給list

@ tmp的父物件為list,從父物件list裡找到第i個鍵值對的位址賦值給tmp

@ tmp->valuestring 取tmp的value

*/cjson* list = cjson_getobjectitem(jsonobj, "list");

if (list)

}else

return;

更複雜的資料結構請參考

Spring IOC與AOP的個人理解

ioc 控制反轉 又名 依賴注入 正常情況下 無ioc 你製作一件家具 你需要錘子,自己去找錘子 你需要扳手,自己去找扳手 你需要鋸子,自己去找鋸子 家具完成了 ioc情況下 製作前,你把錘子,扳手,鋸子給管家 所以稱為 依賴注入 你製作一件家具 你需要錘子,管家遞給你錘子 所以稱為 控制反轉 你需...

MVC與MVP(僅限個人的理解)

mvc分為 model 資料抽象 view 檢視 controller 控制器 的三層架構。接下來我們分別來一一解析每一層所對應的職責分別是什麼。窗框 窗架 玻璃 玻璃上的窗花 優點 邏輯清晰,controller層和view層在一起的 在乙個類裡面,在乙個activity或者fragment 層次...

個人理解 尾呼叫與遞迴

尾呼叫就是指某個函式的最後一步是呼叫另乙個函式。尾遞迴就是尾呼叫自身。相信大家都看過阮老師的這篇文章 尾呼叫優化 他是說,函式呼叫會在記憶體形成乙個 呼叫記錄 又稱 呼叫幀 call frame 儲存呼叫位置和內部變數等資訊。如果在函式a的內部呼叫函式b,那麼在a的呼叫記錄上方,還會形成乙個b的呼叫...