C C 學習筆記 rapidjson的簡單使用

2021-08-28 02:31:40 字數 2470 閱讀 8144

answer:rapidjson是乙個 c++ 的 json 解析器及生成器 。rapidjson不依賴第三方庫,而且只包含標頭檔案,使用方便簡單。

有的時候,需要的json格式是十分複雜的,如下所示:

,//value是乙個陣列且裡面每個元素又是乙個json格式,]

}

std::string build_json_msg(),{}]

rapidjson::value array_json(rapidjson::karraytype);

rapidjson::value obj(rapidjson::kobjecttype);//每乙個陣列裡面是乙個json格式

obj.addmember("a","a",allocator);

obj.addmember("b","b",allocator);

array_json.pushback(obj,allocator);

rapidjson::value obj1(rapidjson::kobjecttype);//每乙個陣列裡面是乙個json格式

obj1.addmember("c","c",allocator);

obj1.addmember("d","d",allocator);

array_json.pushback(obj1,allocator);

array_json.pushback(obj1,allocator);

doc.addmember("elp",array_json,allocator);

rapidjson::stringbuffer s;

rapidjson::writerwriter(s);

doc.accept(writer);

return std::string(s.getstring());

}

在生成的時候我們需要幾個十分重要的物件,document、allocatortype。剛開始的三行**是比較固定的,先申明乙個doc和乙個分配器。

rapidjson::document doc;//生成dom元素

doc.setobject();

rapidjson::document::allocatortype& allocator = doc.getallocator();//生成乙個分配器

我們新增json元素主要通過doc.addmember(key,value,分配器)的形式來生成。如果json格式很簡單,那麼**也很簡單,如下:

doc.addmember("name","jack",allocator);

doc.addmember("age",18,allocator);

但是,如果涉及到陣列。就需要注意一下。首先,我們需要建立乙個陣列型別的物件。然後把陣列裡面的內容pushback進去。最後同樣通過doc.addmember()新增進去。但是value卻變成了array_sub.說明addmember()的第二個引數,不僅可以是值還可以是物件。

rapidjson::value array_sub(rapidjson::karraytype);//建立乙個陣列型別物件

array_sub.pushback("a",allocator);

array_sub.pushback("b",allocator);

//***************=

doc.addmember("sub",array_sub,allocator);

同樣,如果陣列裡面是json串,該怎麼辦呢?其實寫法按著上面的邏輯來,看上面的**,只不過把『a』換成object型別的。具體寫法如下:

//====構建陣列object===[,{}]

rapidjson::value array_json(rapidjson::karraytype);

rapidjson::value obj(rapidjson::kobjecttype);//每乙個陣列裡面是乙個json格式

obj.addmember("a","a",allocator);

obj.addmember("b","b",allocator);

array_json.pushback(obj,allocator);

rapidjson::value obj1(rapidjson::kobjecttype);//每乙個陣列裡面是乙個json格式

obj1.addmember("c","c",allocator);

obj1.addmember("d","d",allocator);

array_json.pushback(obj1,allocator);

array_json.pushback(obj1,allocator);

doc.addmember("elp",array_json,allocator);

C C學習筆記

1.儲存型別 標準c語言為變數 常量 函式定義了4種儲存型別 extern,auto,static,register,它們分別用乙個關鍵字 儲存型別說明符 來說明。這4種儲存型別可分為兩種生存期限 永久的 即整個程式執行期間都存在 extern和static 和臨時的 即暫時儲存在堆疊和暫存器中 a...

C,C 學習筆記

1.求a的n次方 標頭檔案pow a,n a,n都為double 2.關於指標的一些小測試 includeusing namespace std int main int a 8 int m 3 cout 3.sort位於 algorithm 中,sort p,p n 預設公升序排列。4.inclu...

C C 學習筆記 三

到目前為止,我們看到的所有函式中,傳遞到函式中的引數全部是按數值傳遞的 by value 也就是說,當我們呼叫乙個帶有引數的函式時,我們傳遞到函式中的是變數的數值而不是變數本身。但在某些情況下你可能需要在乙個函式內控制乙個函式以外的變數。要實現這種操作,我們必須使用按位址傳遞的引數 argument...