JSON(JavaScript Object Notation)用键值对、数组与字面量描述结构化数据, 可读性较好,被大量 API 与配置文件采用(亦有 YAML、TOML、MessagePack 等替代场景)。 本文覆盖语法子集、跨语言边界与安全注意。
入门:基本类型
- 对象:无序的「字符串键 → 值」集合,写作
{ "key": value }。 - 数组:有序列表,写作
[ a, b, c ]。 - 值可为字符串、数字、布尔、null、对象或数组(可嵌套)。
深入:文本格式与编码
JSON 文本通常用 UTF-8 传输;若上下游编码不一致,会出现「肉眼可见乱码」或解析失败。
请先读本站 UTF-8 与乱码,再看 HTTP 头里的 charset 与 API 文档。
深入:跨语言互操作的坑
- 数字精度:IEEE 双精度无法精确表示所有十进制小数;金额常见做法是字符串整数(分)或专用 decimal 类型约定。
- 大整数:超出 JS
Number安全整数范围时,前端可能丢精度;需字符串传输或扩展类型。 - 日期:标准 JSON 无日期类型;常用 ISO 8601 字符串,时区约定要写死。
安全:不要把 JSON 当作信任边界
- 解析不可信输入可能触发资源耗尽(超大嵌套)、类型混淆(数组 vs 对象混用)。
- 应配合模式校验(JSON Schema 等)与大小/深度限制。
常见语法坑
- 键名必须用双引号;末尾逗号在标准 JSON 中不允许。
- 注释不属于标准 JSON(JSON5 等超集另议)。
现行文本格式以 IETF RFC 8259 为准(取代较早 RFC);生产环境可配合 JSON Schema 做契约校验。