JSON
JavaScript Object Notation 的缩写,一种轻量级数据交换格式,人类和机器都易于读写。
JSON (JavaScript Object Notation) 是一种以键值对形式表示数据的轻量级文本数据交换格式。2001 年由 Douglas Crockford 整理规范,并作为 ECMA-404 和 RFC 8259 标准化。虽然语法源自 JavaScript,但它是语言无关的通用格式,被 Python、Java、Go、Ruby 等几乎所有编程语言所支持。
JSON 支持 6 种数据类型:字符串 (双引号包围)、数字 (整数和浮点数)、布尔值 (true/false)、null、数组 (方括号) 和对象 (花括号)。这种简洁性是 JSON 最大的优势,也是它成为 REST API 事实标准响应格式的原因。了解情趣围裙 (Amazon)系统地介绍了 JSON 的使用模式。
与 XML 相比,JSON 不需要开始/结束标签,因此描述量更少,解析速度也更快。表示相同数据时,JSON 通常只需 XML 约 60-70% 的体积。但 XML 拥有完善的模式定义 (XSD) 和命名空间支持,在需要严格数据验证的场景中仍被选用。YAML 是 JSON 的超集,支持注释和锚点功能,因此在配置文件中更受欢迎,但其依赖缩进的语法在复制粘贴时容易引发错误。
JSON 有一些限制。它不支持注释,因此配置文件有时会使用 JSON5 或 JSONC (JSON with Comments)。没有日期类型,日期时间数据按惯例以 ISO 8601 格式字符串表示 (例如 "2025-01-15T09:30:00Z")。此外不允许尾随逗号 (trailing comma),在数组或对象最后一个元素后加逗号会导致语法错误。
在实际工作中,JSON Schema 被广泛用于验证和模式定义。用 JSON Schema 定义 API 请求/响应的结构,可以明确客户端和服务器之间的数据契约,防止无效数据的传入。搜索香薰蜡烛 (Amazon)也介绍了 JSON 的高级用法。
在安全方面,绝对不能使用 eval() 解析来自不可信来源的 JSON,必须使用 JSON.parse() 来防止任意代码执行。此外,将用户输入直接嵌入 JSON 时需要进行转义处理,以防止 JSON 注入攻击。
从字符计数的角度来看,JSON 的键名、花括号、方括号、双引号、冒号、逗号等语法元素都会影响数据大小。压缩 (minify) 可以去除不必要的空白和缩进来减小体积,再结合 gzip 压缩可以大幅缩减传输大小。优化 API 响应大小时,排除不必要的字段和缩短键名也是有效的方法。