您好,登錄后才能下訂單哦!
怎么在C++中使用jsoncpp對json進行解析?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
jsoncpp中主要的類:
Json::Value:可以表示所有支持的類型,如:int , double ,string , object, array等。其包含節點的類型判斷(isNull,isBool,isInt,isArray,isMember,isValidIndex等),類型獲取(type),類型轉換(asInt,asString等),節點獲取(get,[]),節點比較(重載<,<=,>,>=,==,!=),節點操作(compare,swap,removeMember,removeindex,append等)等函數。
Json::Reader:將文件流或字符串創解析到Json::Value中,主要使用parse函數。Json::Reader的構造函數還允許用戶使用特性Features來自定義Json的嚴格等級。
Json::Writer:與JsonReader相反,將Json::Value轉換成字符串流等,Writer類是一個純虛類,并不能直接使用。在此我們使用 Json::Writer 的子類:Json::FastWriter(將數據寫入一行,沒有格式),Json::StyledWriter(按json格式化輸出,易于閱讀)。
Json::Reader可以通過對Json源目標進行解析,得到一個解析好了的Json::Value,通常字符串或者文件輸入流可以作為源目標。
json示例:
[ { "name": "json", "lines": [ { "line": "1" }, { "line": "2" }, { "cpp": "jsoncpp" }, { "java": "jsoninjava" }, { "php": "support" } ] }, { "name": "c++", "lines": [ { "line": "3" }, { "line": "4" }, { "cpp": "jsoncpp" }, { "java": "jsoninjava" }, { "php": "nosupport" } ] } ]
C++代碼:
#include <iostream> #include <fstream> #include <string> #include "../src/json/json.h" using namespace std; using namespace Json; void main() { fstream ofile("json.json"); string strjson; if (!ofile.is_open()) { return; } string strline; while (getline(ofile, strline)) { strjson += strline; } ofile.close(); Json::Reader reader; // 讀取器 Json::Value root; // Value的值值可以是任一對象 if (reader.parse(strjson, root)) { int size = root.size(); // 根結點個數 for (int j = 0; j < size; j++) { cout << root[j]["name"].asString() << endl; const Json::Value arrayObj = root[j]["lines"]; for (int i = 0; i < arrayObj.size(); i++) { if (arrayObj[i].isMember("line")) { cout << arrayObj[i]["line"].asString() << endl; } if (arrayObj[i].isMember("cpp")) { cout << arrayObj[i]["cpp"].asString() << endl; } if (arrayObj[i].isMember("java")) { cout << arrayObj[i]["java"].asString() << endl; } int m = 0; } } } }
看完上述內容,你們掌握怎么在C++中使用jsoncpp對json進行解析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。