Cocos2d-x中Json(rapidjson)的扩展
发布时间:2020-12-14 16:44:14 所属栏目:百科 来源:网络整理
导读:容我直接上代码 /*** 保存Json文件** @param fileName 文件名* @param doc Json对象** @return 是否保存成功*/static bool saveJsonFile(const char *fileName,rapidjson::Document doc) {bool bRet = false;do {//LS_LOG("file path : %s",fileName);rapidj
容我直接上代码 /** * 保存Json文件 * * @param fileName 文件名 * @param doc Json对象 * * @return 是否保存成功 */ static bool saveJsonFile(const char *fileName,rapidjson::Document &doc) { bool bRet = false; do { //LS_LOG("file path : %s",fileName); rapidjson::StringBuffer buffer; rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); doc.Accept(writer); std::string str = buffer.GetString(); FILE *fp = std::fopen(lsStandardPath(fileName).c_str(),"wb"); CCASSERT(fp != nullptr,"file open error"); //fwrite(str.c_str(),str.length(),1,fp); fputs(str.c_str(),fp); fclose(fp); bRet = true; } while (0); return bRet; } /** * 删除Json数组的某一个对象 * * @param index 第几个 * @param value Json对象 * * @return 是否读取成功 */ static bool removeJsonArrayItem(int index,rapidjson::Value &value) { bool bRet = false; int size = value.Size(); if (index < size) { for (unsigned int i = index; i + 1 < value.Size(); i++) value[i] = value[i + 1]; value.PopBack(); bRet = true; } return bRet; } /** * 将char*转成Json对象 * * @param str 要转换的字符 * @param doc 转换后的Json对象 * * @return 是否转换成功 */ static bool readJsonWithString(const char *str,rapidjson::Document &doc) { bool bRet = false; do { std::string content(str); replaceString(content,":null",":"""); doc.Parse<0>(content.c_str()); CCASSERT(!doc.HasParseError(),"HasParseError"); bRet = true; } while (0); return bRet; } /** * 读取Json文件 * * @param fileName 文件名 * @param doc 转换后的Json对象 * * @return 是否读取成功 */ static bool readJsonWithFile(const char *fileName,rapidjson::Document &doc) { bool bRet = false; if (cocos2d::FileUtils::getInstance()->isFileExist(fileName)) { std::string contentStr = cocos2d::FileUtils::getInstance()->getStringFromFile(fileName); //LS_LOG("%s connent:%s",fileName,contentStr.c_str()); bRet = readJsonWithString(contentStr.c_str(),doc); } return bRet; } /** * 将json的Value转成String * * @param node Json格式的Value * @param strret 转换后的String * * @return 0表示成功,-1表示失败 */ static int valueToString(const rapidjson::Value &node,std::string &strret) { strret.clear(); char tmp[64] = { 0 }; if (node.IsString()) { strret = node.GetString(); return 0; } else if (node.IsDouble()) { //sprintf_s(tmp,63,"%.2lf",node.GetDouble()); sprintf(tmp,node.GetDouble()); strret = tmp; return 0; } else if (node.IsNumber()) { sprintf(tmp,"%.0lf",node.GetDouble()); strret = tmp; return 0; } else if (node.IsFalse()) { strret = "false"; return 0; } else if (node.IsTrue()) { strret = "true"; return 0; } return -1; } /** * 查找Json数据中的值 * * @param node Json格式的Value * @param key 关键字 * @param value 值 * * @return -1表示失败,其他情况表示数组中第几个 */ static int getIndexWithJsonArray(rapidjson::Value &node,const char *key,const char *value) { int index = -1; if (node.IsArray()) { for (unsigned int i = 0; i < node.Size(); i++) { //const char* temp = node[i][key].GetString(); //LS_LOG("%s%s",value,temp); if (strcmp(value,node[i][key].GetString()) == 0) { index = i; break; } } } CCASSERT(index != -1,"not find value in array"); return index; } static void sortJsonArray(rapidjson::Value &node,bool isAsc = true) { CCASSERT(node.IsArray(),"is not array"); rapidjson::Value temp; int dir = isAsc ? 1 : -1; for (unsigned int j = 0; j < node.Size(); j++) for (unsigned int i = 0; i < node.Size() - 1; i++) { CCASSERT(node[i].HasMember(key),"not member"); CCASSERT(node[i][key].IsInt(),"not int"); if (dir * node[i][key].GetInt() > dir * node[i + 1][key].GetInt()) { temp = node[i]; node[i] = node[i + 1]; node[i + 1] = temp; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |