返回教程

JSON 能写注释吗:标准的答案与四种替代

标准 JSON 不支持注释——写了就解析失败。这是设计者刻意的决定。这篇讲清为什么,以及配置文件想要注释时的四种实用替代。

写了注释会怎样

上面这段在几乎所有标准解析器里都会直接报错。JSON 之父 Douglas Crockford 刻意移除了注释:一是保持格式极简,二是他观察到有人用注释存放置指令,让格式产生方言、失去互操作性。

{
  // this comment breaks JSON.parse
  "name": "app"
}

替代一:换带注释的方言

很多工具链已经支持 JSONC(JSON with Comments)或 JSON5:VS Code 的配置、tsconfig 都是 JSONC;JSON5 还允许尾逗号、单引号、裸键名。如果配置文件由你控制解析端,直接换方言是最舒服的。

替代二:开发期方言、交付前剥离

开发期用 JSON5 / JSONC 自由写注释,交付或部署前剥成标准 JSON——站内「JSON5 转 JSON」工具就是干这个的,注释剥掉时会计数提示,不会静默吞内容。

{
  // JSON5 / JSONC: comments allowed
  "name": "app", // trailing comma is fine too in JSON5
}

替代三:用字段当注释

在数据里放一个约定字段(常见 _comment、//、description)。缺点明显:它是真实数据,会被传输存储、可能与业务字段撞名,消费方还得约定忽略它。只适合偶尔标注一两处的场景。

{
  "_comment": "workaround: a plain field used as a note",
  "name": "app"
}

替代四:换配置格式

如果场景本来就是「人写的配置」,YAML 与 TOML 原生支持注释,可能比在 JSON 上打补丁更对路——参见站内 JSON 与 YAML / TOML 的互转工具与对比教程。

用 JSON5 转 JSON 剥注释