wafuの技術

技術習得の努力メモです。

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){

まだ、勉強中なのでここまでです。