#include #include #include #include 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; }