JSON 格式化工具背后的故事
如今大多数 Web API 都使用 JSON,但它从未由某个委员会设计。与其说是发明,不如说是被发现:它是 JavaScript 的一个小子集,恰好足以在程序之间传递数据。
一种被发现的格式
大约在 2001 年,Douglas Crockford 和他在 State Software 的同事想让浏览器和服务器在不使用插件的情况下交换数据。他们采用了 JavaScript 已经能理解的对象和数组字面量,为这个想法起了名字,并把语法发布在 json.org 上。这份语法短到可以印在名片背面。
为什么没有注释
Crockford 很早就把注释从 JSON 中去掉了,因为有人开始在注释里放解析指令,这会破坏互操作性。他的建议是在解析前用压缩工具去掉注释。因此格式化工具会把注释报告为意外字符,也因此出现了用于配置文件的 JSON5 和 JSONC 等格式。
从网页到标准
JSON 最早在 2006 年以 RFC 4627 描述。Ecma 在 2013 年发布了 ECMA-404,IETF 在 2017 年用 RFC 8259 取代了旧文本,并要求系统之间交换的 JSON 使用 UTF-8。自 json.org 以来,语法几乎没有变化:对象、数组、字符串、数字、true、false 和 null。
数字和路径
JSON 本身不限制数字,但大多数解析器把数字存为 64 位浮点数,因此大于 9007199254740991 的整数可能会悄悄丢失精度。所以很大的 ID 通常以字符串发送。为了指向某个值,Stefan Goessner 在 2007 年借鉴 XPath 提出了 JSONPath,它在 2024 年成为 RFC 9535 标准。本工具复制的路径采用这种带美元符号和方括号的写法。
常见问题
JSON 是谁发明的?
Douglas Crockford 在 2000 年代初定义并推广了 JSON。他说自己是发现了它,因为它是 JavaScript 中早已存在的一个子集。
为什么 JSON 不允许末尾逗号或单引号?
语法被尽量保持精简,让每种语言都能以同样方式解析。每多一种便利,就多一次两个解析器结果不一致的机会。
JSON 和 JavaScript 对象一样吗?
不一样。JSON 是文本。键必须使用双引号,函数、undefined、注释、NaN 和 Infinity 都不被允许,即使 JavaScript 代码中可以使用它们。
准备好尝试了吗?
在浏览器中打开 PictorX — 无需安装,无需信用卡即可启动。
打开 JSON 格式化工具