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