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

Why can I put comments in some JSON files but not others?

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

前者随后在 GitHub 上被识别为 "JSON with Comments"(即使我实际上没有在其中发表评论)。

为什么我可以在一些 JSON 文件中添加评论,而在其他文件中不能?

默认情况下,IDE 检查是否严格符合标准,因为标准 JSON 不允许评论。

我们在设置中提供了一组选项来放宽合规性检查 |编辑|检查,JSON 和 JSON5 |符合JSON标准,并且对于某些文件,默认情况下检查评论的选项是关闭的(tsconfigtslinteslint配置),作为对应工具允许在 JSON 中进行评论(这是硬编码的)。

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

您不能在 JSON 文件中添加评论。 JSON 不允许评论。请注意,序列化格式有几个微妙的不同变体,它们都称为“JSON”,但其中 none 允许注释:

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

I removed comments from JSON because I saw people were using them to hold parsing directives, a practice which would have destroyed interoperability. I know that the lack of comments makes some people sad, but it shouldn't.

Suppose you are using JSON to keep configuration files, which you would like to annotate. Go ahead and insert all the comments you like. Then pipe it through JSMin before handing it to your JSON parser.

但是, 一些看起来类似于 JSON 的序列化格式 允许注释:

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

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

Why can I put comments in some JSON files but not others?

您不能在 JSON 文件中添加评论。但是其中一些文件不是 JSON,它们是允许评论的不同内容。

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

如有疑问,请坚持使用 YAML、OGDL - Ordered Graph Data Language, or TOML - Tom's Obvious Minimal Language.

等正式标准化格式