微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐