Jsoncpp的编解码---高级篇

前端之家收集整理的这篇文章主要介绍了Jsoncpp的编解码---高级篇前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1.  

只讲编解码两个字符串:

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

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

  1. 程序中要用到一些结构体和容器:
    struct data
  2. {
  3. 	string status;
  4. 	string msgid;
  5. 	string rids;
  6. 	string errcode;
  7. };
    vector<data> succVec

  8.  
  9. 分别解出字符串中的成员。
  10. 编写的字符串为:{"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"]}]}
  11. 解码编码程序:

  12. void decodeJson(const string& str,data& dataJson)
  13. {
  14. 	Json::Reader reader;
  15. 	Json::Value root;
  16. 	if(reader.parse(str,root))
  17. 	{
  18. 		if(!root["status"].empty())
  19. 		{
  20. 			dataJson.status = root["status"].asString();
  21. 		}		
  22. 		if(!root["success_ids"].empty())
  23. 		{
  24. 			Json::Value sidsArrary = root["success_ids"];
  25. 			for(int i = 0;i < sidsArrary.size();i++)
  26. 			{
  27. 				if(!sidsArrary[i]["rids"].empty())
  28. 				{
  29. 					dataJson.msgid = sidsArrary[i]["msgid"].asString();
  30. 				}
  31. 				
  32. 				if(!sidsArrary[i]["rids"].empty())
  33. 				{
  34. 					Json::Value sridsArrary = sidsArrary[i]["rids"];
  35. 					if(sridsArrary.isArray())
  36. 					{
  37. 						Json::Value sridselement;
  38. 						for(int j = 0;j < sridsArrary.size();j++)
  39. 						{
  40. 							sridselement = sridsArrary[j];
  41. 							dataJson.rids = sridselement.asString();
  42. 						}
  43. 					}
  44. 				}				
  45. 			}
  46. 		}
  47. 		if(!root["Failed_ids"].empty())
  48. 		{
  49. 			Json::Value fidsArrary = root["Failed_ids"];
  50. 			for(int p = 0;p < fidsArrary.size();p++)
  51. 			{
  52. 				if(!fidsArrary[p]["msgid"].empty())
  53. 				{
  54. 					dataJson.msgid = fidsArrary[p]["msgid"].asString();
  55. 				}
  56. 				if(!fidsArrary[p]["error_code"].empty())
  57. 				{
  58. 					dataJson.errcode = fidsArrary[p]["error_code"].asString();
  59. 				}
  60. 				if(!fidsArrary[p]["rids"].empty())
  61. 				{
  62. 					Json::Value fridsArrary = fidsArrary[p]["rids"];
  63. 					if(fridsArrary.isArray())
  64. 					{
  65. 						Json::Value fridselement;
  66. 						for(int q = 0;q < fridsArrary.size();q++)
  67. 						{
  68. 							fridselement = fridsArrary[q];
  69. 							dataJson.rids = fridselement.asString();
  70. 						}
  71. 					}
  72. 				}				
  73. 			}
  74. 		}
  75. 	}
  76. }
  77. void encodeJson(vector <data>& dataVec,string& strRet)
  78. {
  79. 	data dataJson;
  80. 	vector<data> succVec;
  81. 	vector<data> failVec;
  82. 	Json::Value succRoot,failRoot;
  83. 	Json::FastWriter writer;
  84. 	//Classify the message receipt : Successful receipt & Failful receipt
  85. 	vector<data>::iterator iter;
  86.     for (iter = dataVec.begin();iter != dataVec.end();iter++)
  87.     {  
  88. 		dataJson = *iter;
  89. 		if(!dataJson.status.compare("success"))
  90. 		{
  91. 			succVec.push_back(dataJson);
  92. 		}
  93. 		else
  94. 		{
  95. 			failVec.push_back(dataJson);
  96. 		}
  97.     }  
  98. 	//Successful receipt coding
  99. 	if(0 < succVec.size())
  100. 	{
  101. 	    for (int i = 0;i < succVec.size();i++)  
  102. 	    {
  103. 			Json::Value sidsArrary;
  104. 			sidsArrary["msgid"] = succVec[i].msgid;
  105. 			sidsArrary["rids"].append(succVec[i].rids);
  106. 			succRoot["success_ids"].append(sidsArrary);
  107. 			succRoot["status"] = succVec[i].status;
  108. 	    }
  109. 	}
  110. 	//Failful receipt coding
  111. 	if(0 < failVec.size())
  112. 	{
  113. 		 for (int i = 0;i < failVec.size();i++)  
  114. 	    {
  115. 			Json::Value fidsArrary;
  116. 			fidsArrary["error_code"] = failVec[i].errcode;
  117. 			fidsArrary["msgid"] = failVec[i].msgid;
  118. 			fidsArrary["rids"].append(failVec[i].rids);
  119. 			failRoot["Failed_ids"].append(fidsArrary);
  120. 	    }
  121. 	}
  122. 	//Integrated coding
  123. 	if((!succRoot.empty()) && (!failRoot.empty()))
  124. 	{
  125. 		succRoot["Failed_ids"] = failRoot["Failed_ids"];
  126. 		strRet = writer.write(succRoot);
  127. 	}
  128. 	else if((!succRoot.empty()) && failRoot.empty())
  129. 	{
  130. 		strRet = writer.write(succRoot);
  131. 	}
  132. 	else if(succRoot.empty() && (!failRoot.empty()))
  133. 	{
  134. 		strRet = writer.write(failRoot);
  135. 	}	
  136. }
  137.     
  138.         
  139.       

猜你在找的Json相关文章