Json学习三

来源:互联网 发布:win10网络设置关闭 编辑:程序博客网 时间:2024/06/09 18:22


1.解析(json字符串转为对象)

std::string strDataJson;

Json::Reader JReader; 

Json::Value JObject;

if (!JReader.parse(strDataJson, JObject))

{

cerr << "parse json error." << endl;

return bSuccess;

}


2,读取

std::string strMsg = JRec["msg"].asString();

int nRetCode = JRec["ret"]..asInt();

Json::Value JList = JRec["data"]["list"];

int nSize = JList.size();


获取错误信息: JReader.getFormatedErrorMessages()


3,增加或修改

JRoot["stringdata"] = Json::Value("msg");

JRoot["intdata"] = Json::Value(10);


4,删除

JValue.removeMember("toberemove");


5,对象转为字符串

//输出无格式json字符串

Json::FastWriter fast_writer;

strJRecList = fast_writer.write(JRoot);


//格式化之后的json,有回车换行符

std::string strOut = JRoot.toStyledString();


6各种json子类型的使用

(1)json Object 

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. for (Json::ValueIterator iter=groups_config.begin(); iter!=groups_config.end();iter++) {  
  2.      Json::Value client_dict = (*iter)["clients"];  
  3.      string topic_recresult = (*iter)["topics"]["recresult"].asString();  
  4.      string topic_recreq = (*iter)["topics"]["recreq"].asString();  
  5.      string topic_input = (*iter)["topics"]["input"].asString();  
  6.      for (Json::ValueIterator client_iter=client_dict.begin(); client_iter != client_dict.end(); ++client_iter) {  
  7.        string cid = client_iter.key().asString();  
  8.        // FIXME: create a new customer configuration  
  9.        CustomerPtr c(new Customer);  
  10.        c->LoadFromJson(cid, (*client_iter), topic_recresult, topic_recreq, topic_input);  
  11.        customers[cid] = c;  
  12.      }  
  13.    }  



2.使用jsoncpp读JSON文件
如何将lib库添加进VS工程中在此就不赘述了。先看第一个读文件的例
[js] view plaincopy
  1. // JSON文件  
  2. {"address":[  
  3.     {"name":"eliteYang""email":"elite_yang@163.com"},  
  4.     {"name":"AAA""email":"aaa@163.com"},  
  5.     {"name":"BBB""email":"bbb@163.com"}  
  6. ]}  

[cpp] view plaincopy
  1. /** 
  2.  * file     :   jsoncpp_test.cpp 
  3.  * author   :   eliteYang 
  4.  * email    :   elite_yang@163.com 
  5.  * blog     :   http://www.cppfasn.org 
  6.  * desc     :   json cpp test 
  7.  */  
  8.    
  9. #include <fstream>  
  10. #include <string>  
  11. #include "jsoncpp/json.h"  
  12.    
  13. int _tmain(int argc, _TCHAR* argv[])  
  14. {  
  15.     std::ifstream ifs;  
  16.     ifs.open("test.json");  
  17.    
  18.     Json::Reader reader;  
  19.     Json::Value root;  
  20.     if (!reader.parse(ifs, root, false))  
  21.     { return -1; }  
  22.    
  23.     Json::Value add_value = root["address"];  
  24.     for (int i = 0; i < add_value.size(); ++i)  
  25.     {  
  26.         Json::Value temp_value = add_value[i];  
  27.         std::string strName = temp_value["name"].asString();  
  28.         std::string strMail = temp_value["email"].asString();  
  29.         std::cout << "name: " << strName << " email: " << strMail << std::endl;  
  30.    
  31.         // use value array[index]  
  32.         //Json::Value temp_value = add_value[i];  
  33.         //std::string strName = add_value[i]["name"].asString();  
  34.         //std::string strMail = add_value[i]["email"].asString();  
  35.         //std::cout << "name: " << strName << " email: " << strMail << std::endl;  
  36.     }  
  37.    
  38.     system("Pause");  
  39.    
  40.     return 0;  
  41. }  

结果:

name: eliteYang email: elite_yang@163.comname: AAA email: aaa@163.comname: BBB email: bbb@163.com请按任意键继续. . .

跟我们文件中的数据完全一致。


3.使用JSON写入一块数据

我们继续使用上述文件,在中间加上一块数据。我们插入一个新的{"name": "append", "email": "append@163.com"}

[cpp] view plaincopy
  1. /** 
  2.  * file     :   jsoncpp_test.cpp 
  3.  * author   :   eliteYang 
  4.  * email    :   elite_yang@163.com 
  5.  * blog     :   http://www.cppfasn.org 
  6.  * desc     :   json cpp test 
  7.  */  
  8.    
  9. #include <fstream>  
  10. #include <string>  
  11. #include "jsoncpp/json.h"  
  12.    
  13. int _tmain(int argc, _TCHAR* argv[])  
  14. {  
  15.     std::ifstream ifs;  
  16.     ifs.open("test.json");  
  17.    
  18.     Json::Reader reader;  
  19.     Json::Value root;  
  20.     if (!reader.parse(ifs, root, false))  
  21.     { return -1; }  
  22.    
  23.     Json::Value& add_value = root["address"];  
  24.     Json::Value append_value;  
  25.     append_value["name"] = "append";  
  26.     append_value["email"] = "append@163.com";  
  27.     add_value.append(append_value);  
  28.    
  29.     for (int i = 0; i < add_value.size(); ++i)  
  30.     {  
  31.         Json::Value temp_value = add_value[i];  
  32.         std::string strName = temp_value["name"].asString();  
  33.         std::string strMail = temp_value["email"].asString();  
  34.         std::cout << "name: " << strName << " email: " << strMail << std::endl;  
  35.     }  
  36.    
  37.     Json::FastWriter writer;  
  38.     std::string json_append_file = writer.write(root);  
  39.    
  40.     std::ofstream ofs;  
  41.     ofs.open("test_append.json");  
  42.     ofs << json_append_file;  
  43.    
  44.     system("Pause");  
  45.    
  46.     return 0;  
  47. }  

结果:

name: eliteYang email: elite_yang@163.comname: AAA email: aaa@163.comname: BBB email: bbb@163.comname: append email: append@163.com请按任意键继续. . .
[js] view plaincopy
  1. // test_append.json  
  2. {"address":[{"email":"elite_yang@163.com","name":"eliteYang"},{"email":"aaa@163.com","name":"AAA"},{"email":"bbb@163.com","name":"BBB"},{"email":"append@163.com","name":"append"}]}  
0 0