引言:为什么在 C++ 中需要 JSON?
\nJSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,广泛应用于 Web 应用程序、配置文件和 API。尽管 JSON 最初出现在 JavaScript 中,但如今它已成为在服务器和客户端之间(包括 C++ 在内的任何编程语言)传输结构化数据的事实标准。
\n在本文中,我们将探讨如何在 C++ 中操作 JSON:解析(读取)和序列化(创建)JSON 数据。本材料面向已经熟悉 C++ 基础知识(变量、函数、类)但尚未接触过 JSON 的初学者开发者。
\n为了在 C++ 中操作 JSON,我们将使用流行的 nlohmann/json 库(也称为 JSON for Modern C++)。它易于安装、直观易懂,非常适合学习。
\n\n安装 nlohmann/json 库
\n在编写代码之前,需要引入该库。最简单的方法是使用 header-only 版本(仅需一个头文件)。
\n\n方法 1:下载 json.hpp 文件
\n- \n
- 访问 nlohmann/json 的 GitHub 仓库。 \n
- 从最新版本中下载
json.hpp文件。 \n - 将其放入您的项目文件夹中。 \n
- 在代码中引入:
#include "json.hpp"\n
方法 2:使用包管理器(vcpkg / Conan)
\n如果您使用 CMake,通过 vcpkg 安装库是最简单的方法:
\nvcpkg install nlohmann-json\n或者通过 Conan:
\nconan install nlohmann_json/3.11.2@\n\n安装后,在代码中引入库:
\n#include <nlohmann/json.hpp>\nusing json = nlohmann::json;\n\n现在您已准备好开始操作!
\n\nC++ 中的 JSON 解析:读取数据
\n解析是将 JSON 字符串转换为可在代码中操作的对象的过程。nlohmann/json 库使这一过程变得非常简单。
\n\n示例 1:解析 JSON 字符串
\n假设我们有一个包含用户信息的 JSON 字符串:
\n{\n "name": "阿列克谢",\n "age": 30,\n "is_student": false,\n "hobbies": ["阅读", "编程", "骑行"]\n}\n\n解析只需一行代码:
\n#include <iostream>\n#include <nlohmann/json.hpp>\n\nusing json = nlohmann::json;\n\nint main() {\n // 原始 JSON 字符串\n std::string json_str = R"(\n {\n "name": "阿列克谢",\n "age": 30,\n "is_student": false,\n "hobbies": ["阅读", "编程", "骑行"]\n }\n )";\n\n // 解析\n json data = json::parse(json_str);\n\n // 访问数据\n std::string name = data["name"];\n int age = data["age"];\n bool is_student = data["is_student"];\n std::vector<std::string> hobbies = data["hobbies"];\n\n // 输出\n std::cout << "姓名: " << name << std::endl;\n std::cout << "年龄: " << age << std::endl;\n std::cout << "是否学生? " << (is_student ? "是" : "否") << std::endl;\n std::cout << "爱好: ";\n for (const auto& hobby : hobbies) {\n std::cout << hobby << " ";\n }\n std::cout << std::endl;\n\n return 0;\n}\n\n执行结果:
\n姓名: 阿列克谢\n年龄: 30\n是否学生? 否\n爱好: 阅读 编程 骑行\n\n示例 2:处理嵌套对象
\nJSON 通常包含嵌套结构。让我们看一个包含地址的示例:
\n{\n "user": {\n "name": "玛丽亚",\n "address": {\n "city": "莫斯科",\n "street": "特维尔大街"\n }\n }\n}\n\n访问嵌套数据:
\n博客
书籍推荐
推荐阅读