JSON 为什么不能写注释、不能用单引号
写配置的时候顺手加一行 // 说明,保存,然后解析器报错。很多人第一次遇到都会觉得莫名其妙。
原因其实不复杂:JSON 的设计目标是“最小、最确定”,不是“最好写”。
规范里就没有注释
JSON 由 Douglas Crockford 在 2001 年前后提出,规范只有一页。它明确规定:数据就是对象、数组、字符串、数字、布尔值和 null,没有注释语法。
解析器严格按规范实现,所以看到 / 就认为是非法字符。不是它不想支持,是规范没给这个位置。
单引号也是同理
JSON 的字符串只认双引号。单引号在 JavaScript 里能用,是因为 JS 的语法允许,JSON 没有采纳。
尾逗号也一样。JS 引擎能容忍,JSON 规范不允许。
为什么这么严格
为了互操作。
JSON 要在浏览器、Java、Python、Go、嵌入式设备之间传。如果每个解析器都按自己的习惯放宽一点,同一段文本在不同语言里结果可能不同,那就失去了“数据交换格式”的意义。
严格换来的是确定性。这对接口和配置文件来说,比书写方便重要。
那配置文件里的注释怎么回事
tsconfig.json、VS Code 的 settings.json 能写注释,是因为它们用的是 JSONC(JSON with Comments),不是标准 JSON。
JSON5 还支持单引号、尾逗号、十六进制数字。这些是扩展格式,需要对应的解析器,不能直接喂给标准 JSON 解析。
想加说明怎么办
加一个字段,比如 "_comment": "这里填说明"。虽然不够优雅,但合法、可解析、跨语言通用。
或者把说明写在文档里,别塞进数据。
不确定某段内容能不能被标准解析器接受,贴进 JSON 在线解析 试一次就知道了。