当你的gcc编译爆出以下函数错误:
error: ‘CharReaderBuilder’ is not a member of ‘Json’
error: ‘StreamWriterBuilder’ is not a member of ‘Json’
那么恭喜你,你的Json版本太老啦!
赶紧卸载再安装吧!
但是 如果你并不想卸载再安装,其实也可以使用旧版的接口,
以下是我提供的一种方法,如有错误还请指正!
序列化接口:
static bool Serialize(const Json::Value &value,std::string *body)
{
//Json::StreamWriterBuilder swb;
Json::Value root=value;
Json::StyledWriter writer;
std::string s=writer.write(root);
//std::cout<<s<<std::endl;
*body=s.c_str();
return true;
}
反序列化接口:
static bool UnSerialize(const std::string &body,Json::Value *value)
{
Json::Value crb=value;
Json::Reader reader;
//parse 反序列化
bool ret=reader.parse(body.c_str(),crb,true);
*value=crb;
return true;
}
使用测试:
void JsonTest()
{
Json::Value val;
val["姓名"]="小张";
val["年龄"]=18;
val["性别"]="男";
val["成绩"].append(77.5);
val["成绩"].append(87.5);
val["成绩"].append(97.5);
std::string body;
aod::JsonUtil::Serialize(val,&body);
std::cout<<body<<std::endl;
Json::Value stu;
aod::JsonUtil::UnSerialize(body,&stu);
std::cout<<stu["姓名"].asString()<<std::endl;
std::cout<<stu["性别"].asString()<<std::endl;
std::cout<<stu["年龄"].asInt()<<std::endl;
for(auto &a:stu["成绩"])
{
std::cout<<a.asDouble()<<std::endl;
}
}
结果:
分享完毕!祝大家程序都没有bug!