第 11 课
生成:从程序值到 JSON 文本
序列化、键顺序,以及如何为测试与 API 保持稳定输出。
生成(序列化)把内存中的值写成 JSON 文本——用于 HTTP 响应、文件导出或测试夹具。它是解析的逆过程,同样需要做设计选择。
默认行为因语言而异
多数序列化器会:
- 忽略
undefined属性(JavaScript)或要求显式处理 null - 自动转义字符串
- 以十进制写出数字
概念上可能得到:
{"status": "ok", "count": 3}
键顺序与稳定输出
JSON 中键的 语义顺序无关,但字节顺序会影响:
- Git diff 与快照测试
- 对原始字节的签名
- 基于 canonical JSON 的缓存键
团队有时在生成前按字母序排序键,使逻辑相等的对象产生相同字符串。
美化与紧凑
| 模式 | 适用场景 |
|---|---|
| 缩进美化 | 人工审查、文档、调试 |
| 紧凑 | 传输体积敏感 |
同一数据两种形式都可合法——按 受众 选择,而非对错。
往返一致性
理想路径:值 → 文本 → 解析 → 相等值。浮点数、超大整数或自定义类型(日期、BigInt)若未约定表示法,可能无法完美往返。应在 API 规范中写明(如 ISO 日期字符串、字符串表示的 decimal)。