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(); } } } } 太晚了以后有时间接着写保存

相关文章

AJAX是一种基于JavaScript和XML的技术,能够使网页实现异步交...
在网页开发中,我们常常需要通过Ajax从后端获取数据并在页面...
在前端开发中,经常需要循环JSON对象数组进行数据操作。使用...
AJAX(Asynchronous JavaScript and XML)是一种用于创建 We...
AJAX技术被广泛应用于现代Web开发,它可以在无需重新加载页面...
Ajax是一种通过JavaScript和HTTP请求交互的技术,可以实现无...