C++ 中的 JSON 处理:数据解析与序列化

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

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

开始课程

在 C++ 中使用 JSON:解析与序列化



JSON(JavaScript Object Notation)仍然是 Web 应用程序、配置文件和 API 中最流行的数据交换格式之一。尽管 C++ 没有内置对 JSON 的支持,但有几种强大的库可以轻松高效地处理这种格式。在本文中,我们将介绍两个最流行的库:nlohmann/json(推荐用于大多数项目)和 RapidJSON(用于对性能要求苛刻的任务)。您将学习如何解析 JSON、将对象序列化回字符串以及处理错误。



为什么在 C++ 中需要 JSON?



C++ 是一种系统编程语言,但现代应用程序越来越需要与 Web 服务交互、存储配置或在微服务之间交换数据。JSON 为这些任务提供了一种方便、人类可读的格式。在 C++ 中使用 JSON 库可以实现:

  • 加载和处理配置文件(例如,用于游戏引擎或服务器)。
  • 与 REST API 交互(发送和接收数据)。
  • 保存和恢复复杂数据结构的状态。
  • 与其他使用 JSON 的语言和系统集成。


nlohmann/json 库:简单与便捷



nlohmann/json 库(通常称为“JSON for Modern C++”)可能是最流行的,因为它具有直观的 API,类似于使用 Python 或 JavaScript。它支持 C++11 及更高版本。



安装

最简单的方法是将单个头文件 json.hpp 复制到您的项目中。您可以从官方仓库下载它,或通过包管理器(vcpkg、Conan)安装。



从字符串解析 JSON

让我们看一个解析 JSON 字符串并访问数据的基本示例:

#include <iostream>#include <nlohmann/json.hpp>using json = nlohmann::json;

int main() { // 要解析的 JSON 字符串 std::string json_string = R"({ "name": "C++", "version": 17, "features": ["RAII", "Templates", "Smart Pointers"], "is_compiled": true })";

// 将字符串解析为 json 对象 json data = json::parse(json_string);

// 访问值 std::cout << "语言: " << data["name"] << std::endl; std::cout << "版本: " << data["version"] << std::endl; std::cout << "编译型: " << data["is_compiled"] << std::endl;

// 访问数组 for (auto& feature : data["features"]) { std::cout << " - " << feature << std::endl; } return 0;}

输出:

语言: "C++"版本: 17编译型: true - "RAII" - "Templates" - "Smart Pointers"


序列化(创建 JSON)

创建 JSON 对象并将其转换为字符串同样简单:

#include <iostream>#include <nlohmann/json.hpp>using json = nlohmann::json;

int main() { // 创建一个 JSON 对象 json person; person["name"] = "Alice"; person["age"] = 30; person["is_student"] = false; person["hobbies"] = {"reading", "coding", "chess"};

// 添加嵌套对象 person["address"]["city"] = "Moscow"; person["address"]["zip"] = "101000";

// 序列化为带缩进的字符串 std::string serialized = person.dump(4); // 4 个空格缩进 std::cout << serialized << std::endl;

return 0;}

dump(4) 方法返回一个格式美观的字符串。要获得紧凑输出,请使用

博客

书籍推荐