当前位置:   article > 正文

03_C++整合nlohmannjson_c++添加 nlohmann::json

c++添加 nlohmann::json

C++整合nlohmann/json

在C++中,可以使用第三方库进行 JSON 的序列化和反序列化。一个常用的 JSON 库是 nlohmann/json,它是一个现代的、轻量级的 JSON 库,使用单个头文件即可完成。

整合进项目

到Github上拉去项目,关注点在simgle_include ,里面是两个头文件,直接拷贝到你的工程。即可。

https://github.com/nlohmann/json
  • 1

在这里插入图片描述
在这里插入图片描述

HelloWorld

以下是一个简单的示例,演示如何使用 nlohmann/json 将对象序列化为 JSON 字符串并保存到文件,以及如何从 JSON 字符串中反序列化出对象。

#include <iostream>
#include <fstream>
#include<string>
#include "nlohmann/json.hpp"
using namespace std;

//定义一个示范类
class Person
{
public:
    string name;
    int age;

public:
    //将对象序列化为JSON
    void ToJson(nlohmann::json& jsonParser) const
    {
        jsonParser = nlohmann::json{ {"name",name},{"age",age} };
    }
    //从JSON反序列化为对象
    void ToBean(const nlohmann::json& jsonParser)
    {
        jsonParser.at("name").get_to(name);
        jsonParser.at("age").get_to(age);
    }
};

int main() {
  
    Person person; 
    Person person2;
    string jsonStr; //解析得到的JSON字符串
    ofstream outputStream; //文件输出流
    ifstream inputStream; //文件输入流


    person.name = "JackSon Wang";  //创建一个Person对象
    person.age = 30;   

    //将对象序列化为 JSON字符串
    nlohmann::json jsonParser;
    person.ToJson(jsonParser);
    jsonStr = jsonParser.dump();


    //将JSON字符串保存到文件中 
    outputStream.open("person.json", ios::out | ios::app, _SH_DENYNO);//#define _SH_DENYNO      0x40    /* deny none mode */读取和写入许可
    if (!outputStream.is_open())
    {
        cout << "错误! 打开person.json文件失败" << endl;
        return false;
    }
    outputStream << jsonStr;
    outputStream.close();
    jsonParser.clear();
    cout << "成功! JSON字符串成功持久化到文件中!" << endl;

    //从文件中读取JSON字符串
    inputStream.open("person.json", ios::in, _SH_DENYNO);
    if (!inputStream.is_open())
    {
        cout << "错误! 打开person.json文件失败!" << endl;
    }
    inputStream >> jsonParser;
    inputStream.close();

    //JSON字符串反序列化为对象
    person2.ToBean(jsonParser);

    cout << "从person.json文件中加载并反序列化Person对象\n" << endl;
    std::cout << "Name: " << person2.name << "\n";
    std::cout << "Age: " << person2.age << "\n";

    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/460460
推荐阅读
相关标签
  

闽ICP备14008679号