nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

cocos2d-xでJSONを使う

cocos2d-xはあんまり関係ないですが、C++でJSONを扱うライブラリ picojson の使い方。
まとまった設定なんかを扱うのに使いやすそうです。

使用準備

https://raw.github.com/kazuho/picojson/master/picojson.h からファイルをコピーしてきて Classes の下に "picojson.h" として保存する。

使用例

// picojsonの読み込み
#include "picojson.h"

// JSON文字列の宣言
const char* json =""
"{"
"\"bool1\":true,"
"\"double1\":3.14,"
"\"string1\":\"String\","
"\"array1\":[1,2,3,4,5],"
"\"object1\":{\"foo\":1.1,\"bar\":2.2}"
"}";

// JSONの読み込み
picojson::value v;
std::string err;
picojson::parse(v, json, json + strlen(json), &err);

if (err.empty()) {
    
    // 一番外側のobjectの取得
    picojson::object& o = v.get<picojson::object>();
    
    // bool値の取得
    bool b1 = o["bool1"].get<bool>();
    
    // double値の取得
    double d1 = o["double1"].get<double>();
    
    // string値の取得
    std::string& s1 = o["string1"].get<std::string>();
    
    // array値の取得
    picojson::array& a1 = o["array1"].get<picojson::array>();
    // arrayの中の値をループで取得
    for (picojson::array::iterator i = a1.begin(); i != a1.end(); i++) {
        double d2 = i->get<double>();
    }
    
    // object値の取得
    picojson::object& o1 = o["object1"].get<picojson::object>();
    // objectの値を取得
    double d3 = o1["foo"].get<double>();
    double d4 = o1["bar"].get<double>();
}