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...