呃首先说下原来的2.2.1版本框架中 cocostudio解析Json应该是修改了源文件的jsoncpp, 而且框架本身好像有些问题,导致我想手动再添加jsoncpp的源文件时,编译始终不通过。
阅读了代码后,发现只要把Json命名空间改成CSJson就好了。
没过两天,版本就更新了Σ(っ °Д °;)っ 通过接口发现cocostudio解析Json从jsoncpp改成了rapidJson。 于是我又重新搭了遍工程架子。。
由于框架集成了rapidjson,而且提供了些实用接口(DICTOOL) 所以决定直接使用框架集成的东西了。
我拷了些代码,企图做一个接口出来,目的是读取json文件,返回json对象(rapidjson::document)
rapidJson::Document JsonAnalyzer::getJsonFromFile(const char* fileName){
unsigned char pBytes = NULL;
std::string jsonpath;
rapidjson::Document jsonDict;
jsonpath = CCFileUtils::sharedFileUtils()->fullPathForFilename(fileName);
unsigned long size = 0;
pBytes = CCFileUtils::sharedFileUtils()->getFileData(jsonpath.c_str(),“r” , &size);
if(NULL == pBytes || strcmp((const char)pBytes, “”) == 0)
{
printf(“read json file%s] error!\n”, fileName);
return NULL;
}
CCData *data = new CCData(pBytes, size);
std::string load_str = std::string((const char *)data->getBytes(), data->getSize() );
CC_SAFE_DELETE(data);
jsonDict.Parse<0>(load_str.c_str());
if (jsonDict.HasParseError())
{
CCLOG(“GetParseError %s\n”,jsonDict.GetParseError());
}
return jsonDict;
}
是的,这就是从框架里扒下来的。。 因为自己写也不会比框架写的好
之后问题就来了。 我在我外部想调用这个接口时
rapidjson::Document jsonObj = JsonAnalyzer::getJsonFromFile(“global/properties_en.json”);
结果rapidjson报错了
我的理解就是 =号操作符赋值太耗性能了,我傲娇的rapidjson不让你用…
源代码写的太高深,c++道行粗浅看不太懂… 研究了会官方的文档,似乎也没找到赋值相关的东西
后来想了下, 把接口改成了
bool JsonAnalyzer::getJsonFromFile(const char* fileName, rapidjson::Document jsonDict);
这样形式,企图把对象直接传进去赋值
然后接下来又报
我暂时无解了,求各位大神解惑…