nlohmann/json库通过单头文件实现C++中JSON的解析与生成,支持字符串解析、对象构建、数组嵌套及自定义类型序列化,语法简洁且功能完整,极大简化了数据交换与配置处理。

在C++中处理JSON数据一直是个挑战,因为语言标准库没有内置支持。但使用第三方库 nlohmann/json 可以让这个过程变得非常简单直观。这个单头文件库语法清晰、功能强大,广泛用于现代C++项目。
1. 引入nlohmann/json库
这个库是header-only的,意味着你只需包含一个头文件即可使用。
获取方式:
-
通过GitHub下载:访问 https://www.php.cn/link/b82e68e6366d4177332acdf3fa4d1e3a,将
json.hpp文件复制到项目中 -
使用包管理器:如vcpkg或conan,执行
vcpkg install nlohmann-json
在代码中引入:
立即学习“C++免费学习笔记(深入)”;
#includeusing json = nlohmann::json;
2. 解析JSON字符串
从字符串创建JSON对象非常直接:
std::string str = R"({"name": "Alice", "age": 25, "city": "Beijing"})";
json j = json::parse(str);
// 访问数据
std::string name = j["name"];
int age = j["age"];
支持自动类型转换,也可用 at() 方法进行安全访问(越界会抛异常)。
3. 构建和输出JSON
你可以像使用普通变量一样构造JSON结构:
json j;
j["name"] = "Bob";
j["hobbies"] = {"reading", "coding"};
j["address"]["street"] = "Main St";
// 输出格式化字符串
std::cout << j.dump(2) << std::endl; // 参数2表示缩进空格数
4. 处理复杂结构:数组与嵌套对象
支持完整的JSON结构,包括数组和多层嵌套:
json users = json::array();
users.push_back({{"id", 1}, {"name", "Alice"}});
users.push_back({{"id", 2}, {"name", "Bob"}});
// 遍历
for (auto& user : users) {
std::cout << user["name"] << std::endl;
}
5. 序列化自定义C++类
通过定义 to_json 和 from_json 函数,实现类与JSON的转换:
struct Person {
std::string name;
int age;
};
void to_json(json& j, const Person& p) {
j = json{{"name", p.name}, {"age", p.age}};
}
void from_json(const json& j, Person& p) {
p.name = j.at("name");
p.age = j.at("age");
}
之后就可以直接使用 json j = person_obj; 或 person_obj = j.get










