【C++】nlohmann json

  • Post author:
  • Post category:其他




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



版权声明:本文为zhudaokuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。