在C++中,处理JSON文件通常需要使用第三方库,因为C++标准库本身并不直接支持JSON格式。一个非常流行的C++ JSON库是 nlohmann/json。它易于使用,文档齐全,并且功能强大。
下面是一个简单的示例,展示如何使用nlohmann/json库来读取和写入JSON文件。
安装nlohmann/json库
你可以通过以下几种方式来安装nlohmann/json库:
-
使用包管理工具:
-
vcpkg:
vcpkg install nlohmann-json
-
conan:
conan install nlohmann_json/3.11.2@
-
-
从GitHub直接下载:
你可以直接从 nlohmann/json GitHub页面下载源代码,并将其添加到你的项目中。通常,库的单个头文件json.hpp
可以直接包含在项目中。也可以直接在该链接 免费下载C++ json库
示例代码
以下是一个示例代码,演示如何使用nlohmann/json库来读取和写入JSON文件。
-
包含头文件:
#include <iostream> #include <fstream> #include <nlohmann/json.hpp> using json = nlohmann::json;
-
写入JSON文件:
void write_json(const std::string& filename) { // 创建一个 JSON 对象 json j; j["name"] = "John Doe"; j["age"] = 30; j["is_student"] = false; j["courses"] = {"Math", "Science", "Literature"}; // 打开文件并写入 JSON 数据 std::ofstream file(filename); if (file.is_open()) { file << j.dump(4); // 4 是缩进级别 file.close(); std::cout << "JSON 数据已写入文件 " << filename << std::endl; } else { std::cerr << "无法打开文件 " << filename << std::endl; } }
-
读取JSON文件:
void read_json(const std::string& filename) { // 打开文件并读取 JSON 数据 std::ifstream file(filename); if (file.is_open()) { json j; file >> j; // 打印 JSON 数据 std::cout << "读取的 JSON 数据:" << std::endl; std::cout << j.dump(4) << std::endl; // 4 是缩进级别 // 访问 JSON 数据中的字段 std::string name = j["name"]; int age = j["age"]; bool is_student = j["is_student"]; std::vector<std::string> courses = j["courses"].get<std::vector<std::string>>(); std::cout << "Name: " << name << std::endl; std::cout << "Age: " << age << std::endl; std::cout << "Is Student: " << is_student << std::endl; std::cout << "Courses: "; for (const auto& course : courses) { std::cout << course << " "; } std::cout << std::endl; file.close(); } else { std::cerr << "无法打开文件 " << filename << std::endl; } }
-
主函数:
int main() { const std::string filename = "example.json"; // 写入 JSON 文件 write_json(filename); // 读取 JSON 文件 read_json(filename); return 0; }
编译和运行
假设你将上述代码保存为 main.cpp
,并且你已经安装了nlohmann/json库,编译和运行程序的步骤如下:
-
编译:
g++ -std=c++11 -o json_example main.cpp
-
运行:
./json_example
这个程序将创建一个 example.json
文件,写入一些数据,然后读取这个文件并打印出数据。