【C++】nlohmann/json
目录
■主要特性
■使用方式
■与其他库比较
■总结
nlohmann/json 是一个广泛使用的 C++ JSON 库,是一个单头文件、无依赖、功能丰富、符合现代 C++ 风格的 JSON 解析与序列化库。
GitHub: https://github.com/nlohmann/json
文档: JSON for Modern C++ - JSON for Modern C++
■主要特性
特性 | 说明 |
单头文件 | 只需包含一个 json.hpp 文件即可使用,无需编译 |
无依赖 | 不依赖其他第三方库 |
现代 C++ 风格 | 使用 std::vector, std::map, std::string 等标准类型 |
支持 C++11+ | 充分利用 C++11 特性(如 auto, initializer_list) |
JSON <-> C++ 类型自动转换 | 支持基本类型、容器、自定义结构体 |
异常安全 | 可选启用异常处理机制 |
支持 STL 风格操作 | 支持迭代器、at(), operator[] 等 |
跨平台 | 支持 Linux、macOS、Windows、嵌入式系统 |
文档丰富 | 官方文档完整,社区活跃,GitHub 星高 |
■使用方式
#include "json.hpp"using json = nlohmann::json;
使用示例:
#include <iostream>
#include "json.hpp"using json = nlohmann::json;int main() {// 创建 JSON 对象json j;j["name"] = "Alice";j["age"] = 25;j["skills"] = {"C++", "Python", "JSON"};// 转换为字符串std::string s = j.dump(); // {"name":"Alice","age":25,"skills":["C++","Python","JSON"]}std::cout << s << std::endl;// 解析 JSON 字符串std::string json_str = R"({"is_student":true,"score":89.5})";json j2 = json::parse(json_str);// 访问字段bool is_student = j2.value("is_student", false);double score = j2.value("score", 0.0);return 0;
}
■与其他库比较
功能 | nlohmann/json | RapidJSON | JsonCpp | Boost.PropertyTree |
单头文件 | ✅ | ❌ | ❌ | ❌ |
无依赖 | ✅ | ✅ | ✅ | 依赖 Boost |
易用性 | ✅ | ❌ | 中等 | 中等 |
STL 风格 | ✅ | ❌ | 中等 | 中等 |
自动类型转换 | ✅ | ❌ | ❌ | ❌ |
异常安全 | ✅ | ✅ | ✅ | ✅ |
文档丰富 | ✅ | ✅ | ✅ | ✅ |
■总结
nlohmann/json 是目前 C++ 社区中最受欢迎的 JSON 库之一,凭借其简洁的接口、现代 C++ 风格、无依赖、易集成等优点,广泛用于:
- Web 后端开发(如 RESTful API)
- 配置文件读写
- 日志系统
- 游戏开发中的数据序列化
- 嵌入式系统通信
- 数据分析与机器学习接口
适合追求开发效率、代码可读性、跨平台兼容性的 C++ 项目使用。
至此,本文的内容就结束了。