使用JsonCpp解析和生成Json
阿新 • • 發佈:2018-12-13
一:什麼是JSON? JSON 指的是 JavaScript 物件表示法(JavaScript Object Notation),是一種key-value的表示方法,類似於{ “name”:“Kobe” } 二:什麼時候用JSON? 因為JSON的明瞭,簡單,易於解析。JSON常用來傳輸和儲存對應的文字資訊。 三:什麼是JsonCpp JsonCpp是一個基於c++的免費開源庫。 下載地址:https://sourceforge.net/projects/jsoncpp/ 四:配置對應的工程,將JsonCpp對應的庫檔案和標頭檔案及實現檔案引入到自己所使用的工程中 五:解析一個Json字串
#include <iostream> #include <json.h> #include <string> using namespace std; int main() { //這次要做的是解析該欄位 string strJson="{\"name\" : \"Tocy\", \"salary\" : 100, \"msg\" : \"work hard\", \"files\" : [\"1.ts\", \"2.txt\"]}"; //1.首先定義一個隊形的Json物件 Json::Value JsonVal; //2.在定義一個Json閱讀器 Json::Reader JsonRead; JsonRead.parse(strJson, JsonVal); //3.通過key值訪問對應的欄位 //解析"name" if (JsonVal.isMember("name") && JsonVal["name"].isString()) { //使用時,記得先判斷是否是該Json的欄位,在判斷是否是對應的型別,然後才可以轉換成對應的型別 cout << "JsonVal[name] = " << JsonVal["name"].asString()<< endl; } //解析"salary" if (JsonVal.isMember("salary") && JsonVal["salary"].isInt()) { cout << "JsonVal[salary] = " << JsonVal["salary"].asInt() << endl; } //解析MSG if (JsonVal.isMember("msg") && JsonVal["msg"].isString()) { cout << "JsonVal[msg] = " << JsonVal["msg"].asString() << endl; } //解析file if (JsonVal.isMember("files") && JsonVal["files"].isArray()) { Json::Value JsonValChild = JsonVal["files"]; for (unsigned int i =0 ; i < JsonValChild.size() ; i++) { cout << "JsonValChild[files] " << i << " is" << JsonValChild[i].asString() << endl; } } }
6.將對應的JSON欄位寫入到配置檔案中
ofstream ofs; ofs.open("test.txt"); //1.直接將對應的Json物件儲存到檔案中 //ofs << JsonVal << endl; //2.不帶格式的輸出FastWriter Json::FastWriter fw; ofs << fw.write(JsonVal) << endl; //3.帶格式的輸出 StyledWriter //Json::StyledWriter sw; //ofs << sw.write(JsonVal) << endl; ofs.close();
7.從配置檔案中讀取對應的JSON
ifstream ifs;
ifs.open("test.txt");
Json::Value JsonVal;
Json::Reader JsonRead;
JsonRead.parse(ifs, JsonVal);
ifs.close();