前端之家收集整理的这篇文章主要介绍了
rapidjson 使用总结,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
rapidjson只有hpp
文件,包含了hpp
文件不需要编译成库就可以使用 先说解析: 从
文件里读出来json字符串,假设
文件里的json字符串是: { "第一": "1","第二": "2","第三": 3,"第四": null",第五": 4.0,"第六": true", "第七": [ { "第一项": 1, "第二项": 2, "第三项": 3 } ],"第八": [ "第一项", "第二项", "第三项" ],"第九": { 1, 2, 3 } } 然后通过document解析,
代码如下: string sDocuPath; //假设已经给他路径字符串 string str; std::ifstream inf; ostringstream oss; inf.open(sDocuPath.c_str()); oss.str(""); oss << inf.rdbuf(); inf.close(); //strText就是
文件里的
内容 string strText = oss.str(); //开始解析strText rapidjson::Document doc; doc.Parse(strText.c_str()); rapidjson::ParseErrorCode error(rapidjson::kParseErrorNone); error = doc.GetParseError(); if (error != rapidjson::kParseErrorNone) { LOGE << "Json Map 解析失败..." << endl; return; } if (doc.HasMember("第一")) { rapidjson::Value& firstV = doc["第一"]; if (firstV.IsString()) { str = firstV.GetString(); //str是"1" } } if (doc.HasMember("第二") && doc["第二"].IsObject()) { rapidjson::Value& secondV = doc["第二"]; if (secondV.IsString()) { str = secondV.GetString(); //str是"2" } } if (doc.HasMember("第三") ) { rapidjson::Value& thirdV = doc["第三"]; if (thirdV.IsNumber()) { str = thirdV.GetNumber(); //str是"3" } } if (doc.HasMember("第四") ) { rapidjson::Value& childV = doc["第四"]; if (childV.IsNull()) { str ; //str是null } } if (doc.HasMember("第五") ) { rapidjson::Value& childV = doc["第五"]; if (childV.IsDouble()) { double a = thirdV.GetDouble(); } } if (doc.HasMember("第六") ) { rapidjson::Value& childV = doc["第六"]; if (childV.IsBoolean()) { str = thirdV.GetBoolean(); } } if (doc.HasMember("第七") ) { rapidjson::Value& childV = doc["第七"]; if (childV.IsArray()) { for(int i=0; i<childV.size(); ++i){ Value& objectV = childV[i]; if(objectV.IsObject()){ if(objectV.hasMember("第一项")) if(objectV["第一项"].IsString()) str = objectV["第一项"].GetString(); if(objectV.hasMember("第二项")) if(objectV["第二项"].IsString()) str = objectV["第二项"].GetString(); if(objectV.hasMember("第三项")) if(objectV["第三项"].IsString()) str = objectV["第三项"].GetString(); } } } } if (doc.HasMember("第八") ) { rapidjson::Value& childV = doc["第八"]; if (childV.IsArray()) { for(int i=0; i<childV.size(); ++i){ //解析第8 if(childV[i].isString()) str = childV[i].GetString(); } } if (doc.HasMember("第九") ) { rapidjson::Value& childV = doc["第九"]; if (childV.IsArray()) { for(int i=0; i<childV.size(); ++i){ //解析第8 if(childV[i].isNumber()) str = childV[i].GetNumber(); } } } } 太晚了以后有时间接着写保存