1. 程式人生 > >使用JsonCpp解析和生成Json

使用JsonCpp解析和生成Json

一:什麼是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();