Jsoncpp遍歴

2852 ワード

Jsoncppコードを使うのは比較的簡単で、各クラスが理解しやすいので、ここではこのJsonデータを巡る方法についてお話しします.ソースコードにはテストコードが直接提供され、D:codejsoncpp-src-0.6.0-rc2\src\jsontestrunner\main.cpp、中printValueTreeは遍歴関数で、下にコードを貼ります
fout:出力デバイス、コンソールまたはファイル
Value:これはJsonデータ復号後の基本ユニット、またはノードです
path:各層ノードの階層文字列
コードはとても簡単で、再帰的に文字列に出力して、ただ1つの地方は説明して、Json::Value::Memberはvectorで、valueクラスの中からtypedef std::vector<:string>Json::Value::Members
static void
printValueTree( FILE *fout, Json::Value &value, const std::string &path = "." )
{
   switch ( value.type() )
   {
   case Json::nullValue:
      fprintf( fout, "%s=null
", path.c_str() ); break; case Json::intValue: fprintf( fout, "%s=%s
", path.c_str(), Json::valueToString( value.asLargestInt() ).c_str() ); break; case Json::uintValue: fprintf( fout, "%s=%s
", path.c_str(), Json::valueToString( value.asLargestUInt() ).c_str() ); break; case Json::realValue: fprintf( fout, "%s=%.16g
", path.c_str(), value.asDouble() ); break; case Json::stringValue: fprintf( fout, "%s=\"%s\"
", path.c_str(), value.asString().c_str() ); break; case Json::booleanValue: fprintf( fout, "%s=%s
", path.c_str(), value.asBool() ? "true" : "false" ); break; case Json::arrayValue: { fprintf( fout, "%s=[]
", path.c_str() ); int size = value.size(); for ( int index =0; index < size; ++index ) { static char buffer[16]; sprintf( buffer, "[%d]", index ); printValueTree( fout, value[index], path + buffer ); } } break; case Json::objectValue: { fprintf( fout, "%s={}
", path.c_str() ); Json::Value::Members members( value.getMemberNames() ); std::sort( members.begin(), members.end() ); std::string suffix = *(path.end()-1) == '.' ? "" : "."; for ( Json::Value::Members::iterator it = members.begin(); it != members.end(); ++it ) { const std::string &name = *it; printValueTree( fout, value[name], path + suffix + name ); } } break; default: break; } }

ディレクトリの下のmainに対してcppファイルに興味があるなら、exeにコンパイルしてもいいです.ここではコンソールでclを使用してコンパイルした簡単なバッチスクリプトを直接通じて、jsoncpp-src-0.6に直接接続します.0-rc 2ディレクトリで実行:
jsoncpp-src-0.6.0-rc2
echo off echo start comparing and linking... echo .............................. cl .\src\jsontestrunner\main.cpp .\src\lib_json\*.cpp/I .\include\json\/I .\include  echo delete *.obj files...  del.\*.obj pause echo on
使用時のコマンドラインパラメータは接尾辞名である.jsonのjson形式のファイル、解析した後に同級のディレクトリの下で3つの解析ファイルを生成します