本次Json生成工具升级版是经过封装,只需传入2个vector和1个int值即可完成Json文件的生成。
1).h文件
#include "cocos2d.h" #include "../cocos2d/external/json/document.h" #include "../cocos2d/external/json/writer.h" #include "../cocos2d/external/json/stringbuffer.h" USING_NS_CC; using namespace rapidjson; class JsonMake : public Ref { public: CREATE_FUNC(JsonMake); virtual bool init(); std::string getJsonMyBaodanMain(const std::vector<std::string>& strName,const std::vector<std::string>& strContent,const int count); };2).cpp文件
#include "JsonMake.h" bool JsonMake::init() { bool bRet = false; do{ bRet = true; }while(0); return bRet; } std::string JsonMake::getJsonMyBaodanMain(const std::vector<std::string>& strName,const std::vector<std::string>& strContent,const int count) { rapidjson::Document document; document.SetObject(); CCASSERT(strName.size() == strContent.size(), "strName.size() != strContent.size()"); log("strName.size = %lu,strContent.size = %lu",strName.size(),strContent.size()); rapidjson::Document::AllocatorType& allocator = document.GetAllocator(); rapidjson::Value objectROOT(rapidjson::kArrayType); log("count = %d",count); for(int i = 0; i < count; i++) { rapidjson::Value object(rapidjson::kObjectType); for(int j = 0 ; j < strName.size(); j++) { object.AddMember(strName.at(j).c_str(), strContent.at(j).c_str(), allocator); } objectROOT.PushBack(object,allocator); } document.AddMember("info", objectROOT, allocator); StringBuffer buffer; rapidjson::Writer<StringBuffer> writer(buffer); document.Accept(writer); log("%s",buffer.GetString()); return StringUtils::format("%s",buffer.GetString()); }
只需在HelloWorldScene.cpp中的init函数中添加如下代码:auto path = FileUtils::getInstance()->getWritablePath(); log("path = %s",path.c_str()); path.append("myBaodanMain.json"); FILE* fp = std::fopen(path.c_str(), "at+"); CCASSERT(fp != NULL, "file open error"); auto jsonMake = JsonMake::create(); std::vector<std::string> strName = getStrName(); std::vector<std::string> strContent = getStrContent(); auto str = jsonMake->getJsonMyBaodanMain(strName,strContent,10); auto length = str.length(); fwrite(str.c_str(), length, 1 ,fp); fclose(fp);
然后再添加以下两个函数的定义,当然在.h中的声明是必不可少的呀!
std::vector<std::string> HelloWorld::getStrName() { std::vector<std::string> strName; strName.push_back("baodanTitle"); strName.push_back("baodanStatue"); strName.push_back("insuranceName"); strName.push_back("takeEffectTime"); strName.push_back("timeLimit"); strName.push_back("saleUnit"); strName.push_back("institutionAddress"); strName.push_back("toubaoPerson"); strName.push_back("beibaoPerson"); strName.push_back("forehead"); strName.push_back("premium"); return strName; } std::vector<std::string> HelloWorld::getStrContent() { std::vector<std::string> strContent; strContent.push_back("保单号"); strContent.push_back("保单状态"); strContent.push_back("险种名称"); strContent.push_back("生效日期"); strContent.push_back("保险期限"); strContent.push_back("销售单位"); strContent.push_back("机构地址"); strContent.push_back("投保人"); strContent.push_back("被保人"); strContent.push_back("保额"); strContent.push_back("保费"); return strContent; }4、结果
原文地址:http://blog.csdn.net/yuxikuo_1/article/details/40031391