picojsonのMEMO
JSONのデータを扱うことがあり、調べました。
JSONについては、ここに書いています。
http://www.json.org/json-ja.html
C++に処理するにあたり、ヘッダファイルだけで扱えるとのことで、調べてみました。
ライブラリは動作させるまでが大変だっりします。
ここから、picojson.hをダウンロードします。
https://github.com/kazuho/picojson
このようなツールが作れることに尊敬します。
■使い方
色々なサイトを参考にさせてもらいました。
// 変数
stringstream ss;
ifstream f;
unsigned int i;
// Jsonファイルの読み込み
f.open("Books", ios::binary);
if (!f.is_open()){
return 1;
}
ss << f.rdbuf();
f.close();
// Parse Json data
value v;
ss >> v;
string err = get_last_error();
if(!err.empty()) {
cerr << err << endl;
return -1;
}
■オブジェクトの読み込み
object &o = v.get<object>();
rootsを読む例
object o = v.get<object>()["roots"].get<object>();
■オブジェクトの抽出
object o = v.get<object>()["roots"].get<object>();
for (object::const_iterator it = o.begin(); it != o.end(); it++) {
char buf[4096];
sprintf_s(buf, "%s", it->first.c_str());
MessageBoxA(NULL,buf,"first",MB_OK);
}
it-firstは文字列
it-secondは値
文字列への変換には、to_str()を使用
c_str()で、stringをcharにします。
it-second.to_str().c_str()
■Arrayの読み込み
barの下にchildがある例
object& o2 = o["bar"].get<object>();
array& aAry = o2["child"].get<array>();
for (i = 0; i < aAry.size(); i++){
object& o3 = aAry[i].get<object>();
strcpy(buf,(char *)o3["name"].get<string>().c_str());
}
■型の確認例
型の確認は、getの代わりにisを使います。
//バッファの型を確認
if (o[buf].is<string>() == TRUE){
}else if (o[buf].is<array>() == TRUE){
}else if (o[buf].is<object>() == TRUE){
まだ、勉強中なのでここまでです。