Linux 网络编程:基于 C++ 实现 JSON 与 HTTP Web 服务器
序列化与反序列化
在 TCP 协议通信中,由于 TCP 是面向字节流的,发送数据前通常需要定义结构化数据作为容器。直接传递结构体内存字节会引发字节序和内存对齐问题。因此需要借助序列化将结构化数据转换为连续字节流。
序列化分为文本序列化和二进制序列化。文本序列化(如 JSON)直观可读但体积较大;二进制序列化(如 Protobuf)体积小但不可读。本文重点介绍文本序列化格式 JSON。
JSON 基础
JSON(JavaScript Object Notation)是一种轻量级、基于文本的数据交换格式。它支持整型、浮点型、布尔型、字符串、对象和数组等类型。
| JSON 类型 | C++ 对应类型 | 描述 |
|---|---|---|
| Number | int, double, float | 统一视为数字 |
| Boolean | bool | true/false |
| String | std::string | 双引号包围 |
| Null | nullptr | 空值 |
JSON 对象用大括号包裹键值对,数组用中括号包裹元素。
nlohmann/json 库使用
C++ 中常用 json.hpp (nlohmann/json) 库处理 JSON。该库提供 json 类作为容器,封装了丰富的操作方法。
初始化:
#include "json.hpp"
#include <iostream>
int main() {
// 列表初始化
nlohmann::json j = {{"name", "WZ"}, {"age", 20}};
// 赋值初始化
nlohmann::json j2;
j2["name"] = "wz";
j2["age"] = 20;
}
序列化:
使用 dump() 成员函数将 json 对象转换为字符串。默认紧凑格式,可传入参数指定缩进。
std::string s = j.dump(); // 紧凑格式
std::string s2 = j.dump(4);


