rapidjson 使用总结

来源:互联网 发布:matlab 随机字符串数组 编辑:程序博客网 时间:2024/06/07 17:52

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();

}
}
}

}


太晚了以后有时间接着写保存

原创粉丝点击