问一个编辑器使用的rapidJson的问题┑( ̄Д  ̄)┍

呃首先说下原来的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;
}

是的,这就是从框架里扒下来的。。 因为自己写也不会比框架写的好 :5:

之后问题就来了。 我在我外部想调用这个接口时

rapidjson::Document jsonObj = JsonAnalyzer::getJsonFromFile(“global/properties_en.json”);

结果rapidjson报错了

我的理解就是 =号操作符赋值太耗性能了,我傲娇的rapidjson不让你用…

源代码写的太高深,c++道行粗浅看不太懂… 研究了会官方的文档,似乎也没找到赋值相关的东西

后来想了下, 把接口改成了

bool JsonAnalyzer::getJsonFromFile(const char* fileName, rapidjson::Document jsonDict);

这样形式,企图把对象直接传进去赋值

然后接下来又报

我暂时无解了,求各位大神解惑…

:10: 你写的是隐私方法么?

啊! 我的方法很Public的。。。

好吧 图文并茂。。。

话说引擎的方式是不够用么?这块主要是给读取cocostudio数据用的~~自己改的话对未来升级可能也不太好

你可以考虑自己的解析库,目前解析数据这块我们未来还会考虑新的方式,比如二进制文件~~

只是项目中也有解析json的需求,心想既然框架都优化过了,一定是更好的方案,所以想拿来用的

恩,解析库是因为解析编辑器导出数据慢才换的,所以这块你需要自己来决定是否用自己的类。

我也碰到了同样的问题。。。。
本来想借用一下他用的json解析类
结果看来是用不了了。。

楼主你的C++得好好看看啊,你的doc用值传递是不行的

这句
bool JsonAnalyzer::getJsonFromFile(const char* fileName, rapidjson::Document jsonDict);

你用引用试试
bool JsonAnalyzer::getJsonFromFile(const char* fileName, rapidjson::Document &jsonDict);

谢谢。。我c++学的的确不够扎实,之前确实试过用引用解决,但是没搞明白…

您的方法亲测可用。

配合官方的DICTOOL宏可以操作json。

@你一下, 福音来了, 顺便跟我一起补c++吧 哈哈