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;
输出结果:
{ "age": 30, "is_student": true, "name": "Bob", "skills": ["C++", "Python", "JavaScript"]}
3. 从文件读取和写入 JSON
结合标准文件流操作,可实现持久化存储。
读取JSON文件:
#include std::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-catchtry { auto name = j.at("name"); // 使用 at 会抛出异常如果键不存在} catch (json::exception& e) { std::cerr << "JSON error: " << e.what() << std::endl;}
基本上就这些。nlohmann/json 让C++处理JSON变得直观高效,适合大多数项目需求。集成简单,文档完善,是现代C++开发中的首选方案。
以上就是c++++怎么处理json数据_C++解析与生成JSON数据的方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1477991.html
微信扫一扫
支付宝扫一扫