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 做契约校验。

与其它主题的衔接

RESTHTTP 状态码HTTPS