cocos2d-xでRapidJSONを使ってみた
RapidJSON
RapidJSON(https://github.com/miloyip/rapidjson)はパフォーマンス重視のJSONライブラリです。cocos2d-xのライブラリにはRapidJSONが入っているので、include
するだけで使えます。
cocos2d-xでRapidJSONを使う
RapidJSONを使うには、cocos/external/json
のパスをHeader Search Path
に追加する必要があります。xcodeなら、プロジェクトのターゲットからBuild Settings
というタブに切り替えて、User Header Search Paths
に$(SRCROOT)/../cocos2d/cocos/external/json
を追加してください。
そのあと、json/rapidjson.h
をinclude
すればRapidJSONが使えるようになります。
#include "json/rapidjson.h"
cocos2d-xのRapidJSONは若干バージョンが古いので、最新のバージョンを使いたければ、リポジトリからソースコードをダウンロードして
User Header Search Path
をそれなりに変えれば大丈夫です。
JSONにエンコード
文字列から
std::string str = "{ \"say\" : \"Hello World\" }";
rapidjson::Document d;
d.Parse<rapidjson::ParseFlag::kParseDefaultFlags>(str);
rapidjson::Value& hello = d["say"];
CCLOG("say: %s", hello.getString());
ファイルから
// test.json
{
"name" : "cocos",
"profile" : {
"age" : 17,
"des" : "a cross platform game engine"
}
}
auto path = FileUtils::getInstance()->getWritablePath();
auto file = path + "test.json";
std::string content = FileUtils::getInstance()->getStringFromFile(file);
d.Parse<rapidjson::ParseFlag::kParseDefaultFlags>(content);
rapidjson::Value& des = d["profile"]["des"];
CCLOG("cocos is %s", des.getString());
// cocos is a cross platform game engine
JSON WriterでJSONを作成
rapidjson::StringBuffer str;
rapidjson::Writer<rapidjson::StringBuffer> writer(str);
writer.StartObject();
writer.Key("say");
writer.String("Hello World");
writer.Key("array");
writer.StartArray();
for (int i = 0; i < 20; i++) {
writer.Int(i);
}
writer.EndArray();
writer.EndObject();
CCLOG("%s", str.GetString());
// {"say":"Hello World","array":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
まとめ
cocos2d-xで快適にJSONを使うには、恐らくヘルパーやラッパーの作成が必要になってきます。もし作業を減らしたい、そしてJSONをこだわらなければ、データはplist形式を使うのをおすすめします。