C++ 中的 JSON 操作:面向初学者的解析与序列化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么在 C++ 中需要 JSON?

\n

JSON(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
\n\n

方法 2:使用包管理器(vcpkg / Conan)

\n

如果您使用 CMake,通过 vcpkg 安装库是最简单的方法:

\n
vcpkg install nlohmann-json
\n

或者通过 Conan:

\n
conan install nlohmann_json/3.11.2@
\n\n

安装后,在代码中引入库:

\n
#include <nlohmann/json.hpp>\nusing json = nlohmann::json;
\n\n

现在您已准备好开始操作!

\n\n

C++ 中的 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:处理嵌套对象

\n

JSON 通常包含嵌套结构。让我们看一个包含地址的示例:

\n
{\n  "user": {\n    "name": "玛丽亚",\n    "address": {\n      "city": "莫斯科",\n      "street": "特维尔大街"\n    }\n  }\n}
\n\n

访问嵌套数据:

\n


                
                

博客

书籍推荐