基于 C++ 的 JSON 与 HTTP 网络编程实战
前置知识:序列化与反序列化
在 TCP 通信中,由于 TCP 是面向字节流的,发送数据前通常需要定义结构化数据描述传输内容。直接传递结构体内存字节会引发字节序和内存对齐问题。因此需要借助序列化,将结构化数据转换为连续的字节流。
序列化分为文本序列化与二进制序列化。文本序列化(如 JSON)直观、可读性高;二进制序列化(如 Protobuf)体积小、解析快。
| 特性 | 文本序列化 (JSON/XML) | 二进制序列化 (Protobuf/Thrift) |
|---|---|---|
| 可读性 | 极高 | 低 |
| 传输体积 | 较大 | 极小 |
| 解析速度 | 较慢 | 极快 |
| 跨语言 | 完美 | 优秀 |
实际开发中通常使用成熟的第三方库,本文重点介绍 JSON。
JSON 详解
JSON(JavaScript Object Notation)是一种轻量级、基于文本的数据交换格式。它支持整型、浮点型、布尔型、字符串、对象和数组等类型。
nlohmann/json 库使用
C++ 中常用 json.hpp (nlohmann/json)。需自行引入该头文件。
初始化
#include "json.hpp"
#include <iostream>
using json = nlohmann::json;
int main() {
// 列表初始化
json j1 = {{"name", "WZ"}, {"age", 20}};
// 赋值运算符初始化
json j2;
j2["name"] = "wz";
j2["age"] = 20;
}
序列化与反序列化
- 序列化:调用
dump()成员函数,返回std::string。可传参数控制缩进。 - 反序列化:调用静态函数
parse(string)。
// 反序列化示例
std::string s = ;
json j = json::(s);
std::cout << j[] << std::endl;


