2001年的一个傍晚,道格拉斯·克洛克福特(Douglas Crockford)坐在电脑前,做了一件看起来毫无意义的事。
他翻遍了JavaScript语言的规范文档,在一个几乎没人注意的角落里找到了对象字面量语法。然后他写了几行代码,让这种语法不再只是JavaScript的一部分,而成为了一种独立的数据格式。
他给这个想法取了个名字:JSON(JavaScript Object Notation)。
那个时候,全世界互联网正在用一种叫XML的格式交换数据。如果你见过XML是什么样,你大概会想起一个装满尖括号的文档:
<person>
<name>小明</name>
<age>15</age>
<hobbies>
<hobby>打游戏</hobby>
<hobby>看番</hobby>
</hobbies>
</person>
而JSON是另一种写法:
{
"name": "小明",
"age": 15,
"hobbies": ["打游戏", "看番"]
}
你注意到了吗——XML比JSON多了将近一半的字符。那些尖括号和闭合标签,就像你发微信的时候每说一句话都要在前面写上「本条消息内容是:」一样累赘。
但XML在当时是「标准」。大公司、大机构、全行业都用它。它有严格的规范文档,有Schema负责数据格式定义,有XPath负责查询,有XSLT负责转换——它武装到了牙齿。
而JSON什么也没有。它没有规范,没有官方组织背书,没有行业认证。它只是克洛克福特从JavaScript里挖出来的一个小片段。
那么问题来了:一个什么都没有的小东西,是怎么打败了武装到牙齿的行业标准的?
答案藏在三个关键词里。
第一个词:轻盈。
你不需要学新东西就能看懂JSON。它的核心语法只有三种结构:对象(花括号里的键值对)、数组(方括号里的列表)、值(字符串、数字、布尔值和null)。三样东西,没了。
而XML需要你理解元素、属性、命名空间、DTD、实体引用……一个人要花好几天才能熟练写出正确的XML,但学会JSON只需要大概五分钟。
第二个词:快。
JSON天然符合JavaScript语法。对浏览器来说,一行JSON.parse()就能把文本变成可直接使用的数据对象。而解析XML需要专门的解析器、遍历DOM树、处理命名空间——每一步都是开销。
在2000年代初期,网页正从「静态页面」转型为「动态应用」。每一微秒的加载速度都很宝贵。JSON比XML短30%到50%,传输更快,解析更快。在这个「快就是好」的世界里,短就是绝对优势。
第三个词:宽容。
XML的哲学是——数据在传输前必须是验证过的、结构完整的。少了一个结束标签,整个解析器就会崩溃。它要求完美。
而JSON的哲学是——先把数据传过去,你能处理多少就处理多少。如果某个字段不存在,程序可以优雅地返回undefined,而不是当场崩溃。它接受不完美。
这两种哲学的区别,像极了两种学习方式:一种说「考试之前必须把所有错题改完」,另一种说「先做了再说,错了再改」。
历史证明,在互联网这种快节奏的环境里,第二种方式活得更久。
当然,JSON不是没有缺点。它不支持注释(克洛克福特认为注释会被用来放元数据,破坏简洁性),没有原生日期类型(日期得存成字符串),数字精度也有限……
但这些「缺点」恰好也是它的优势——因为功能少,所以没有歧义。因为简单,所以不会出错。
到了2010年代,JSON已经成为互联网的事实标准。RESTful API用它,NoSQL数据库用它,配置文件用它,甚至AI模型的训练数据也用它。
从2001年的一个业余项目,到2026年全世界每秒传输数十亿次的数据载体——JSON的故事告诉我们一个反直觉的道理:
知道「不要做什么」,往往比知道「要做什么」更重要。
克洛克福特后来在一次演讲里说过一句话,我记到了现在:
「最好的设计不是加无可加,而是减无可减。」
而JSON,就是那个减无可减的东西。