1简介
github地址:nlohmann/json: JSON for Modern C++ (github.com)
2集成
在release中下载json.hpp文件即可。然后将该文件加载到项目中使用。
3使用
这里,我们主要介绍自定义对象的序列化和反序列化为json格式,所以我们需要定义一个数据结构。
#pragma once
using namespace std;
#include <string>
#include "../json/json.hpp"
using namespace nlohmann;
namespace models
{
typedef enum
{
male = 0,
female = 1,
} gender;
typedef struct
{
string name;
uint8_t age;
gender gen;
} person;
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(person, name, age, gen);
}
注意最后一个是关键,有了它才可以序列化自定义数据的结构。
3.1将自定义对象序列化到json文件中
models::person p{"zhuangjuan", 28, models::gender::female};//定义一个person对象
nlohmann::json j = p;//将person对象转换为json对象
ofstream fout("person.json",ios::out);
fout<<j.dump();//将json对象转换为string类型写入到文件中
fout.close();
3.2将json文件反序列化为对象
string msg;
ifstream fin("person.json", ios::in);
fin >> msg;
fin.close();//将json文件读出
json j = nlohmann::json::parse(msg);//将字符串转换为json对象
models::person p = j.get<models::person>();//将json对象转换为person对象
4注意
4.1将对象序列化为json的时候,json中结构默认是按照首字母排序的,怎么样才可以自定义排序,待深究
4.2默认情况下,json结构体中是不允许注释的。如果非要注释需要使用“//”。然后在将json字符串转换为json对象的时候,需要注意一个参数。但是我试了不知道为什么还是不行。。。。
json j = nlohmann::json::parse(msg,nullptr,false,true);