C++中对JSON格式的解析以及序列化和反序列化( 二 )

json value和streamsusing nlohmann::json;//反序列化(Deserialization):>>json j1;std::cin>>j1;//序列化(Seriralization):<<std::cout<<j1;//上述操作适用于istream和ostream的子类,比如我们经常会用到的ifstream和ofstreamstd::ifstream in(animals.json);//打开文件,关联到流injson animals;in>>animals;animals.at(0)["height"]=60;//修改数据in.close();std::ofstream out(animal.json);//打开文件,关联到流outout<<std::setw(4)<<animals;//输出信息,std::setw(4)用于设置增加打印空格out.close();json value和自定义对象在自定义对象命名空间中定义两个函数即可像basic value一样进行反序列化和序列化:from_json(const json& j,T& value)、to_json(json& j,const T& value)
//Animal.h文件//定义Animal类,其包含两个成员变量kind与heightusing nlohmann::json;class Animal{public:Animal(std::string kind,double height){this->kind=kind;this->height=height;}std::string kind;double height;}//定义from_json(const json& j,T& value)函数,用于序列化void from_json(const json& j,Animal& animal){animal.kind=j["kind"].get<std::string>();animal.height=j["height"].get<double>();}//定义to_json(json& j,const T& value)函数,用于反序列化void to_json(json& j,const Animal& animal){j["kind"]=animal.kind;j["height"]=animal.height;}//main.cpp文件int main(){Animal animal{"dog",50};nlohmnn::json j=animal;//像basic value一样将自定义对象赋值给json valuej["height"]=60;//修改数据Animal animalNew = j.get<Animal>();//像basic value一样通过get函数获取值,将其值直接赋值给自定义对象std::cout<<animal.height;//输出60return 0;}



推荐阅读