【C++】nlohmann json

本文介绍了如何在C++中使用nlohmann/json库进行自定义对象与JSON之间的序列化和反序列化操作。通过定义数据结构并使用NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE宏,可以轻松地将对象转换为JSON格式,并从JSON文件恢复。示例中展示了如何将person对象写入和读取JSON文件,同时注意了对象序列化时字段的排序问题以及JSON解析的注释处理。
摘要由CSDN通过智能技术生成

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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值