为什么我可以在某些 JSON 文件中添加注释,而在其他文件中则不能?

oro*_*ome 21 json comments webstorm

我的 IDE (WebStorm) 允许我在一些 JSON 文件中添加注释(例如,tsconfig.json.eslintrc.json),但不允许在其他文件中添加注释(例如,package.jsonapp.json)。

前者随后在 GitHub 上被标识为“带注释的 JSON”(即使我实际上没有注释)。

为什么我可以在某些 JSON 文件中添加注释,而在其他文件中则不能?

len*_*ena 25

默认情况下,IDE 会检查严格的标准合规性,因为标准 JSON 不允许注释。

我们在“设置”|中提供了一组放宽合规性检查的选项。编辑| 检查、JSON 和 JSON5 | 符合 JSON 标准,对于某些文件,检查注释的选项默认处于关闭状态(tsconfig和配置),tslint因为eslint相应的工具允许 JSON 中的注释(这是硬编码的)。

如果您需要向某些 JSON 文件添加注释,您可以将它们的名称添加到“设置 | ”中与JSON5文件类型关联的模式列表中。编辑| 文件类型- JSON5 标准允许注释


Jör*_*tag 9

您不能在 JSON 文件中添加注释。JSON 不允许注释。请注意,序列化格式有几种略有不同的变体,它们都称为“JSON”,但这些变体都不允许注释:

它们之间存在一些细微的差异,但它们的共同点是不允许发表评论。这是设计使然。引用道格拉斯·克罗克福德的话:

我从 JSON 中删除了注释,因为我看到人们使用它们来保存解析指令,这种做法会破坏互操作性。我知道缺乏评论会让一些人感到难过,但不应该。

假设您使用 JSON 来保存您想要注释的配置文件。继续插入您喜欢的所有评论。然后通过 JSMin 将其传递给 JSON 解析器。

但是,有一些类似于 JSON 的序列化格式确实允许注释:

还有几个 JSON 解析库允许某些样式的注释,但没有一个单一的正式规范涵盖所有这些。

还有YAML - YAML Ain't Markup Language,它是 JSON 的超集并带有注释。

为什么我可以在某些 JSON 文件中添加注释,而在其他文件中则不能?

您不能在 JSON 文件中添加注释。但其中一些文件不是 JSON,它们是允许注释的不同文件。

特别是,TypeScript 和 ESLint 都恰好使用忽略注释的 JSON 解析器来解析其配置文件,并且一些编辑器、IDE、语法突出显示、语言检测器等都知道这一点,并将使用允许注释的解析器来解析这些文件。尽管请注意,由于没有带有注释的 JSON 的正式规范,因此不能保证 TypeScript 接受的注释也将被 ESLint 接受,或者 WebStorm 认为 TypeScript 会接受的注释实际上也会被接受。

如有疑问,请坚持使用正式的标准化格式,例如 YAML、OGDL(有序图形数据语言)TOML(汤姆的显而易见的最小语言)

  • 啊,基本上我的 IDE 足够聪明,知道某些 JSON(这里是 ESLint 和 TypeScript)的使用者不会介意是否有注释。(Github 基本上标记这些文件不是标准 JSON。) (3认同)