#include <iostream>
#include <vector>
#include <string>
#include <jsoncpp/json/json.h>
#include <sstream>
// #include <memory>
using std::cout;
using std::endl;
std::string serialize()
{
//1、将需要进行序列化的数据存储在JSON::value对象中
Json::Value root;
root["姓名"]="小明";
root["年龄"]=18;
root["成绩"].append(98);
root["成绩"].append(78);
root["成绩"].append(66);
//2、实例化工厂类对象
Json::StreamWriterBuilder swb;
//3、生产对象
Json::StreamWriter*sw=swb.newStreamWriter();
//4、序列化
std::stringstream ss;
sw->write(root,&ss);
delete sw;
return ss.str();
}
void unserialize(const std::string &str)
{
//1、实例工厂
Json::CharReaderBuilder crb;
//2、生产对象
Json::CharReader* cr=crb.newCharReader();
//3、存储解析数据
Json::Value root;
//4、反序列化
//parse(char*start,char*end,Json::value *val,string* err)
//字符串起始地址,最终地址,接收对象,错误信息
std::string err;
bool ret=cr->parse(str.c_str(),str.c_str()+str.size(),&root,&err);
if(ret==false)
{
std::cout<<"json unserialize failed:"<<err<<std::endl;
return ;
}
//5、访问数据
cout<<"姓名:"<<root["姓名"].asCString()<<endl;
cout<<"年龄:"<<root["年龄"].asInt()<<endl;
int sz=root["成绩"].size();
for(int i=0;i<sz;i++)
cout<<"成绩:"<<root["成绩"][i].asFloat()<<endl;
delete cr;
}
int main()
{
std::string str=serialize();
std::cout<<str<<std::endl;
unserialize(str);
return 0;
}