JsonCppを使用してJsonの解析と生成

3330 ワード

一:JSONとは何ですか.JSONとは、JavaScriptオブジェクト表示法(JavaScript Object Notation)を指し、key-valueの表示方法であり、{"name":"Kobe"}に類似する二:JSONはいつ使いますか.JSONの明瞭さのため、簡単で、解析しやすいです.JSONは、対応するテキスト情報を転送および格納するためによく用いられる.三:JsonCpp JsonCppとは、c++ベースの無料オープンソースライブラリです.ダウンロード先:https://sourceforge.net/projects/jsoncpp/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(データを1行書き込み、フォーマットなし)、Json::StyledWriter(jsonフォーマットで出力し、読みやすい)を使用します.
Json::Readerは、Jsonソースターゲットを解析することで、解析されたJson::Valueを得ることができます.通常、文字列またはファイル入力ストリームはソースターゲットとすることができます.
四:対応する工事を配置して、JsonCpp対応するライブラリファイルとヘッダファイルとインプリメンテーションファイルを自分の使用する工事の中に導入します5:1つのJson文字列を解析します
#include 
#include 
#include 
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();

8.対応するJSONを生成対応するJSON対応を文字列に変換するために使用する関数は、toStyledString()リファレンスhttps://www.cnblogs.com/tocy/p/json-intro_jsoncpp-lib.html