1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <jsoncpp/json/json.h>
- using std::cout;
- using std::endl;
- /*使用json完成数据的序列化工作*/
- std::string serialize()
- {
- // 1. 将需要序列化的数据存储在Json::Value对象中
- Json::Value root;
- root["姓名"] = "小明";
- root["年龄"] = 18;
- root["成绩"].append(80); //成绩是数组类型
- root["成绩"].append(90);
- root["成绩"].append(100);
- // 2. 实例化StreamWriterBuilder工厂类对象
- Json::StreamWriterBuilder swb;
- // 3. 使用StreamWriterBuilder工厂类对象实例化StreamWriter对象
- Json::StreamWriter *sw = swb.newStreamWriter();
- // 4. 使用StreamWriter对象完成Json::Value中数据的序列化工作,并将序列化结果存放到ss中
- std::stringstream ss;
- int n = sw->write(root, &ss);
- if(n != 0)
- {
- cout << "json serialize fail" << endl;
- delete sw;
- return "";
- }
-
- delete sw;
- return ss.str();
- }
- /*使用Json完成序列化数据的反序列化工作*/
- void deserialize(const std::string &str)
- {
- // 1. 实例化一个CharReaderBuilder工厂类对象
- Json::CharReaderBuilder crb;
- // 2. 使用CharReaderBuilder对象实例化一个CharReader对象
- Json::CharReader *cr = crb.newCharReader();
- // 3. 创建一个Json::Value对象,用于保存json格式字符串反序列化后的结果
- Json::Value root;
- // 4. 使用CharReader对象完成json格式字符串的反序列化工作
- std::string errmsg;
- bool ret = cr->parse(str.c_str(), str.c_str() + str.size(), &root, &errmsg);
- if(ret == false)
- {
- cout << "json deserialize fail: " << errmsg << endl;
- delete cr;
- return;
- }
- // 5. 依次打印Json::Value中的数据
- cout << "姓名: " << root["姓名"].asString() << endl;
- cout << "年龄: " << root["年龄"].asInt() << endl;
- int size = root["成绩"].size();
- for(int i = 0; i < size; i++)
- {
- cout << "成绩: " << root["成绩"][i].asFloat() << endl;
- }
- }
- int main()
- {
- std::string str = serialize();
- cout << str << endl;
- deserialize(str);
-
- return 0;
- }
|