JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。它于2001年由Douglas Crockford正式提出,自2006年正式标准化(ECMA-404,2013年首次发布,后更新至第二版2017年)以来,已成为现代互联网数据表示的的事实标准。它源于JavaScript对象字面量,但完全语言独立,几乎所有编程语言都有高效的JSON库支持。JSON的设计哲学是“简洁至上”:最小化冗余、易解析、人类可读。
截至2025年12月,JSON主导RESTful API、NoSQL数据库(如MongoDB、CouchDB)、配置文件(npm、Composer)、实时通信(WebSocket)和前端状态管理(Redux)。尽管有竞争者如Protobuf(二进制、高性能)、MessagePack或YAML(更人性化),JSON因其通用性和生态仍无可替代。
本篇文章将带你深入 JSON 的底层逻辑、性能瓶颈、安全性以及它在现代架构中的高级应用。
JSON 全称是 JavaScript Object Notation(JavaScript 对象表示法)。
虽然名字里带着 JavaScript,但它现在是一种独立于语言的标准(RFC 8259)。无论你使用的是 Python、Java、C++ 还是 Go,都能轻松读写 JSON。
比喻: 如果 XML 是装载货物的“木质大板箱”(稳固但重),那么 JSON 就是“轻便的顺丰快递袋”。它去掉了冗余的标签,只保留最核心的数据,因此体积更小,传输更快。
JSON严格遵守ECMA-404规范,JSON 的核心非常简单,只有两种基本结构:
{} 包裹,表示一个“对象”。[] 包裹,表示一个“数组”。JSON
{
"name": "张三",
"age": 25,
"isStudent": false,
"hobbies": ["编程", "羽毛球", "摄影"],
"address": {
"city": "北京",
"street": "朝阳路"
}
}
无效JSON示例:缺少引号、尾随逗号等会导致解析错误。
JSON 支持以下 6 种基础数据类型:
"Hello"。42 或 3.14(不区分int/float)。不需要双引号,不支持 NaN、Infinity 或 undefined。{...}。[...]。true 或 false。对于时间格式,JSON 官方并不支持 Date 类型。通常需要转换成 ISO 8601 字符串(如 "2025-12-28T15:00:00Z")或 Unix 时间戳。
JSON 默认使用 UTF-8 编码,Unicode 友好,天生支持多语言环境。
JSON 被称为“无模式”(Schemaless)格式,这在快速开发中是优势,但在大型工程中却是隐患。JSON Schema 填补了这个空白,它允许你像定义数据库表结构一样定义 JSON 的规格。
通过 JSON Schema,你可以规定:
age 必须在 0-150 之间)。email 格式)。这使得 JSON 在接口测试和自动化文档(如 Swagger/OpenAPI)中具备了工业级的鲁棒性。
在高性能场景下,JSON 的解析成本不容忽视。
性能优化策略:
ijson)。为了解决 JSON 的存储和查询效率问题,现代数据库(如 PostgreSQL 和 MongoDB)引入了进阶方案。
在 PostgreSQL 中:
当 JSON 的体积和解析速度成为瓶颈时,工程师会转向二进制格式:
虽然 JSON 本身是纯数据,但处理不当会导致严重安全问题:
{ "a": { "b": { "c": ... } } })导致解析器耗尽内存和 CPU,引发拒绝服务攻击(DoS)。eval() 的风险:在旧版 JS 代码中,使用 eval() 来解析 JSON 会导致任意代码执行攻击。始终使用 JSON.parse()。在 Web API 开发中,JSON 已经几乎取代了 XML,原因如下:
| 特性 | JSON | XML |
|---|---|---|
| 可读性 | 非常直观,像人类说话 | 标签密集,看起来比较杂乱 |
| 体积 | 较小(没有冗余的结束标签) | 较大 |
| 解析速度 | 极快(JS 原生支持,解析即对象) | 较慢(需要复杂的 DOM 解析) |
| 数据结构 | 完美对应数组和对象 | 需要转换成树状结构 |
在很多场景中,比如旧项目改造,我们需要把JSON格式数据转化成XML格式,或者把XML格式数据转化成JSON格式,可以使用 在线 XML和JSON互转工具 实现一键转换。
.json 文件来保存用户的个性化设置。如有JSON格式化需求,大部分代码工具都支持JSON格式化,如VS Code、Notepad ++,在线格式化可以使用 JSON格式化工具
JSON 的成功在于它的简单。它不试图解决所有复杂的文档验证问题(那是 XML 的强项),它只想做一件事:用最少的字符,最清晰地表达数据。