互联网时代json数据格式被广泛推广应用,C++中如何进行json序列化和反序列化的?

作者:微信公众号:【架构师老卢】
11-23 8:17
184

概述:在C++中,可以使用第三方库进行 JSON 的序列化和反序列化。一个常用的 JSON 库是 `nlohmann/json`,它是一个现代的、轻量级的 JSON 库,使用单个头文件即可完成。以下是一个简单的示例,演示如何使用 `nlohmann/json` 将对象序列化为 JSON 字符串并保存到文件,以及如何从 JSON 字符串中反序列化出对象。

在C++中,可以使用第三方库进行 JSON 的序列化和反序列化。一个常用的 JSON 库是 nlohmann/json,它是一个现代的、轻量级的 JSON 库,使用单个头文件即可完成。以下是一个简单的示例,演示如何使用 nlohmann/json 将对象序列化为 JSON 字符串并保存到文件,以及如何从 JSON 字符串中反序列化出对象。

首先,确保你已经将 nlohmann/json 头文件拷贝到你的项目中。你可以从 GitHub 上获取它:

# Clone nlohmann/json repository
git clone https://github.com/nlohmann/json.git

# Copy single header file into your project
cp json/single_include/nlohmann/json.hpp /path/to/your/project

接下来,是一个包含详细注释的源代码示例:

#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

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

    // 将对象序列化为 JSON
    void to_json(json& j) const {
        j = json{{"name", name}, {"age", age}};
    }

    // 从 JSON 反序列化为对象
    void from_json(const json& j) {
        j.at("name").get_to(name);
        j.at("age").get_to(age);
    }
};

int main() {
    // 创建一个 Person 对象
    Person person;
    person.name = "John Doe";
    person.age = 30;

    // 将对象序列化为 JSON 字符串
    json personJson;
    person.to_json(personJson);
    std::string jsonString = personJson.dump();

    // 将 JSON 字符串保存到文件
    std::ofstream file("person.json");
    file << jsonString;
    file.close();

    std::cout << "Person 对象已序列化并保存到 person.json 文件中。\n";

    // 从文件中读取 JSON 字符串
    std::ifstream readFile("person.json");
    json loadedJson;
    readFile >> loadedJson;

    // 将 JSON 字符串反序列化为对象
    Person loadedPerson;
    loadedPerson.from_json(loadedJson);

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

    return 0;
}

在这个示例中:

  • Person 类包含了 to_jsonfrom_json 方法,分别用于将对象序列化成 JSON 和从 JSON 反序列化为对象。
  • main 函数中,我们创建了一个 Person 对象,将其序列化成 JSON 字符串并保存到文件中。
  • 接着,我们读取文件中的 JSON 字符串,然后将其反序列化为一个新的 Person 对象。
  • 最后,我们输出加载并反序列化后的 Person 对象的内容。

请确保在编译时链接 nlohmann/json 头文件,并确保你的编译器能够找到该头文件。这个示例提供了一个简单的 JSON 序列化和反序列化的过程,你可以根据实际需求扩展和修改。

阅读排行