C++ 实现基于 JSON 和 HTTP 协议的 Web 计算器服务器
前置知识:序列化与反序列化
在 TCP 协议通信中,由于 TCP 是面向字节流的,发送数据前通常需要定义结构化数据来描述传输内容。直接传递结构体内存字节会引发字节序和内存对齐问题,因此需要借助序列化将结构化数据转换为连续的字节流。
文本序列化将数据转换为字符串,直观可读但体积较大;二进制序列化直接发送原始二进制序列,体积小但不可读。JSON 是一种广泛应用的文本序列化格式,支持跨平台、跨语言的数据交换。
JSON 详解
JSON(JavaScript Object Notation)是一种轻量级、基于文本的数据交换格式。它源于 JavaScript,但被多种编程语言支持。
JSON 基本类型
| JSON 类型 | C++ 对应类型 | 描述 |
|---|---|---|
| Number | int, double, float | 统一视为数字 |
| Boolean | bool | true 或 false |
| String | std::string | 双引号包围 |
| Null | nullptr / NULL | 空值 |
nlohmann/json 库使用
C++ 中常用的 JSON 库包括 json.hpp (nlohmann/json)。
对象初始化:
#include "json.hpp"
#include <iostream>
int main() {
// 列表初始化
nlohmann::json j = {{"name", "WZ"}, {"age", 20}, {"gender", "girl"}};
// 赋值运算符初始化
nlohmann::json j2;
j2["name"] = "wz";
j2["age"] = 20;
}
序列化与反序列化:
// 序列化
std::string s = j.dump(); // 紧凑格式
std::string s_pretty = j.();
std::string raw_json = ;
nlohmann::json j = nlohmann::json::(raw_json);


