nlohmann/json库使C++处理JSON更高效,支持解析字符串、文件读写、生成格式化JSON,并提供类型检查与异常处理机制,集成简单且兼容C++11及以上版本。

在C++中处理JSON数据,由于标准库没有内置支持,通常需要借助第三方库来完成解析与生成。目前最常用且功能强大的库是 nlohmann/json(也称 JSON for Modern C++),它使用方便、头文件仅需包含一个文件,兼容C++11及以上版本。
1. 使用 nlohmann/json 库解析 JSON
该库以简洁的语法操作JSON,支持从字符串、文件中读取JSON,并访问其中的数据。
- 安装方式:可通过 vcpkg、conan 包管理器安装,或直接下载单头文件
json.hpp导入项目。 - 基本用法示例:
解析JSON字符串:
#include#include #include "json.hpp" using json = nlohmann::json; int main() { std::string json_str = R"({ "name": "Alice", "age": 25, "is_student": false, "hobbies": ["reading", "coding"] })"; json j = json::parse(json_str); std::cout << "Name: " << j["name"] << std::endl; std::cout << "Age: " << j["age"] << std::endl; std::cout << "Is student: " << std::boolalpha << j["is_student"] << std::endl; for (const auto& hobby : j["hobbies"]) { std::cout << "Hobby: " << hobby << std::endl; } return 0; }
2. 生成 JSON 数据
使用该库可以轻松构建复杂的JSON结构并输出为字符串。
立即学习“C++免费学习笔记(深入)”;
创建并序列化JSON:
json j;
j["name"] = "Bob";
j["age"] = 30;
j["is_student"] = true;
j["skills"] = {"C++", "Python", "JavaScript"};
std::string output = j.dump(4); // 格式化缩进4个空格
std::cout << output << std::endl;
输出结果:
本文档主要讲述的是使用JSON进行网络数据交换传输;JSON(JavaScript ObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。 和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON的数据格式非常简单,您可以用 JSON 传输一个简单的 St
{
"age": 30,
"is_student": true,
"name": "Bob",
"skills": ["C++", "Python", "JavaScript"]
}
3. 从文件读取和写入 JSON
结合标准文件流操作,可实现持久化存储。
读取JSON文件:
#includestd::ifstream file("data.json"); if (file.is_open()) { json j; file >> j; std::cout << "Loaded: " << j.dump(2) << std::endl; }
写入JSON到文件:
std::ofstream o("output.json");
o << std::setw(4) << j << std::endl; // 需包含 控制格式
4. 错误处理与类型检查
访问JSON字段前建议检查是否存在及类型是否正确,避免运行时异常。
if (j.contains("age") && j["age"].is_number()) {
int age = j["age"];
} else {
std::cerr << "Invalid or missing 'age'" << std::endl;
}
// 或使用 try-catch
try {
auto name = j.at("name"); // 使用 at 会抛出异常如果键不存在
} catch (json::exception& e) {
std::cerr << "JSON error: " << e.what() << std::endl;
}
基本上就这些。nlohmann/json 让C++处理JSON变得直观高效,适合大多数项目需求。集成简单,文档完善,是现代C++开发中的首选方案。










