【cocos2d-x】picojsonでJSONファイルを読み込む
cocos2d-x 3.x になってから2.x系から大幅に変更があって戸惑いました。(クラス名の頭からCCがとれたからそう感じるだけでしょうか。)
ローカルのjsonを読み込むメモです。cocos2d-xプロジェクトへ追加したjsonを使用します。
picojsonというjsonをパースしてくれる便利なライブラリを使います。
(環境:xcode5.1, cocos2d-x-3.1rc0)
{ "hoge" :[ {"x":1, "y":1, "z":1}, {"x":2, "y":1, "z":1} ] }
- jsonの読込み
//ファイルパスの取得 FileUtils* fileUtils = FileUtils::getInstance(); const char* path = "hogehoge.json"; std::string fullpath = fileUtils->fullPathForFilename(path); // ファイルオープン ifstream inputStream; string thisLine; inputStream.open(fullpath.c_str()); if (!inputStream.is_open()) { cerr << "cannot open file!" << endl; exit(1); } stringstream sstream; while (getline(inputStream, thisLine)) { sstream << thisLine; } inputStream.close(); cout << "finish opening file!" << endl; CCLOG("sstream:%s", sstream.str().c_str()); // JSONのパース picojson::value v; picojson::parse(v, sstream); picojson::object& all = v.get<picojson::object>(); picojson::array& array = all["hoge"].get<picojson::array>(); for (picojson::array::iterator it = array.begin(); it != array.end(); it++) { picojson::object& tmpObject = it->get<picojson::object>(); int x = (int)tmpObject["x"].get<double>(); int y = (int)tmpObject["y"].get<double>(); int z = (int)tmpObject["z"].get<double>(); CCLOG("x:%d, y:%d, z:%d", x, y, z); }
以上です。
参考
http://taichino.com/programming/2068
http://nirasan.hatenablog.com/entry/2013/10/24/232905
http://stackoverflow.com/questions/12171445/file-i-o-using-cocos2d-x