C++ 实现 JSON+HTTP Web 服务器与计算器实战
前置知识:序列化与反序列化
在 TCP 通信中,由于协议是面向字节流的,发送数据前通常需要定义结构化容器。直接传输结构体内存会引发字节序和内存对齐问题,因此需要序列化。
序列化将结构化数据转换为连续字节流,分为文本序列化和二进制序列化。文本序列化(如 JSON)可读性高、跨语言支持好,但体积较大;二进制序列化(如 Protobuf)体积小、解析快,但可读性差。
| 特性 | 文本序列化 (JSON/XML) | 二进制序列化 (Protobuf/Thrift) |
|---|---|---|
| 可读性 | 极高 | 低 |
| 传输体积 | 较大 | 极小 |
| 解析速度 | 较慢 | 极快 |
| 跨语言 | 完美 | 优秀 |
实际开发中通常使用成熟库。本文重点介绍 JSON。
JSON 基础与 nlohmann/json
JSON(JavaScript Object Notation)是一种轻量级文本数据交换格式。它本质上是符合规范的字符串,支持对象、数组、数字、布尔值等类型。
基本用法
C++ 中常用 nlohmann/json 库。它通过类对象映射 JSON 数据,提供丰富的操作方法。
#include "json.hpp"
#include <iostream>
int main() {
// 初始化对象
nlohmann::json j = {{"name", "WZ"}, {"age", 20}};
// 访问与修改
std::string name = j["name"];
j["age"] = 21;
// 序列化输出
std::string s = j.dump();
std::cout << s << std::endl;
return ;
}


