Jsoncpp的编解码---高级篇

来源:互联网 发布:淘宝美工的发展前景 编辑:程序博客网 时间:2024/05/22 08:26

只讲编解码两个字符串:

strValue0 = "{\"status\":\"success\",\"success_ids\":[{\"msgid\":\"123\",\"rids\":[\"10000015f33d3831\"]}]}";

strValue1 = "{\"failed_ids\":[{\"error_code\":\"401\",\"msgid\":\"efg\",\"rids\":[\"30000015f33d3831\"]}]}";

程序中要用到一些结构体和容器:
struct data{string status;string msgid;string rids;string errcode;};
vector<data> succVec

分别解出字符串中的成员。编写的字符串为:{"failed_ids":[{"error_code":"400","msgid":"abc","rids":["20000015f33d3831"]},{"error_code":"401","msgid":"efg","rids":["30000015f33d3831"]},{"error_code":"402","msgid":"hij","rids":["40000015f33d3831"]}],"status":"success","success_ids":[{"msgid":"123","rids":["10000015f33d3831"]},{"msgid":"456","rids":["10000015f33d3832"]},{"msgid":"789","rids":["10000015f33d3833"]}]}

解码编码程序:

void decodeJson(const string& str,data& dataJson){Json::Reader reader;Json::Value root;if(reader.parse(str,root)){if(!root["status"].empty()){dataJson.status = root["status"].asString();}if(!root["success_ids"].empty()){Json::Value sidsArrary = root["success_ids"];for(int i = 0;i < sidsArrary.size();i++){if(!sidsArrary[i]["rids"].empty()){dataJson.msgid = sidsArrary[i]["msgid"].asString();}if(!sidsArrary[i]["rids"].empty()){Json::Value sridsArrary = sidsArrary[i]["rids"];if(sridsArrary.isArray()){Json::Value sridselement;for(int j = 0;j < sridsArrary.size();j++){sridselement = sridsArrary[j];dataJson.rids = sridselement.asString();}}}}}if(!root["failed_ids"].empty()){Json::Value fidsArrary = root["failed_ids"];for(int p = 0;p < fidsArrary.size();p++){if(!fidsArrary[p]["msgid"].empty()){dataJson.msgid = fidsArrary[p]["msgid"].asString();}if(!fidsArrary[p]["error_code"].empty()){dataJson.errcode = fidsArrary[p]["error_code"].asString();}if(!fidsArrary[p]["rids"].empty()){Json::Value fridsArrary = fidsArrary[p]["rids"];if(fridsArrary.isArray()){Json::Value fridselement;for(int q = 0;q < fridsArrary.size();q++){fridselement = fridsArrary[q];dataJson.rids = fridselement.asString();}}}}}}}
void encodeJson(vector <data>& dataVec, string& strRet){data dataJson;vector<data> succVec;vector<data> failVec;Json::Value succRoot,failRoot;Json::FastWriter writer;//Classify the message receipt : Successful receipt & Failful receiptvector<data>::iterator iter;    for (iter = dataVec.begin();iter != dataVec.end();iter++)    {  dataJson = *iter;if(!dataJson.status.compare("success")){succVec.push_back(dataJson);}else{failVec.push_back(dataJson);}    }  //Successful receipt codingif(0 < succVec.size()){    for (int i = 0;i < succVec.size();i++)      {Json::Value sidsArrary;sidsArrary["msgid"] = succVec[i].msgid;sidsArrary["rids"].append(succVec[i].rids);succRoot["success_ids"].append(sidsArrary);succRoot["status"] = succVec[i].status;    }}//Failful receipt codingif(0 < failVec.size()){ for (int i = 0;i < failVec.size();i++)      {Json::Value fidsArrary;fidsArrary["error_code"] = failVec[i].errcode;fidsArrary["msgid"] = failVec[i].msgid;fidsArrary["rids"].append(failVec[i].rids);failRoot["failed_ids"].append(fidsArrary);    }}//Integrated codingif((!succRoot.empty()) && (!failRoot.empty())){succRoot["failed_ids"] = failRoot["failed_ids"];strRet = writer.write(succRoot);}else if((!succRoot.empty()) && failRoot.empty()){strRet = writer.write(succRoot);}else if(succRoot.empty() && (!failRoot.empty())){strRet = writer.write(failRoot);}}


原创粉丝点击