为什么 VS Code 允许在 .vscode 内的 JSON 文件中添加注释,但不允许在其他地方添加注释?

Chu*_*uck 7 json comments visual-studio-code

我正在处理一个正在进行的项目,并且在文件中做笔记以解释现有代码的用途。我注意到的一件事是 VS Code 允许(甚至附带)对.vscode文件夹内的 JSON 文件进行注释。这里是.vscode/extensions.json.

在此输入图像描述

但是,如果我尝试在其他地方的 JSON 文件中添加注释,我会被告知不允许添加注释。

在此输入图像描述

我知道如何使用自定义设置解决此问题,但这基本上是 Microsoft 违反规则并允许在 JSON 中读取注释,即使 JSON 不允许注释,但在不允许的文件中强制执行注释禁令要去读什么?

而且,虽然微软可能允许他们正在阅读的 JSON 中的注释,但任何阅读其他 JSON 配置文件的人可能不会,我想我应该远离它们之外的.vscode

JΛY*_*ÐΞV 10


\n


\n

VSC 支持在配置为具有注释支持的每个 JSON 文件中添加注释

\n
\n
\n

\xc2\xa0 \xc2\xa0 \xc2\xa0 JSON 文件中的注释支持并不取决于文件位置或路径名语义,而是取决于正在解析的解析器(更多有关解析器的信息)。\ JSON 中的支持注释远非 VSCode 所独有,当然也不是 VSCode 目录所独有./.vscode/。JSON 中的注释支持是 VSCode 中包含的一项功能,无需第 3 方软件、扩展或任何其他形式的可扩展软件即可使用。我经常在 my 中写评论eslintrc.json,无需任何非默认配置即可支持。另一个支持注释的 JSON 文件,当我在 VSCode 的主题 JSON 文件中工作时,我会利用它,这是 VS-Code 扩展和主题使用的文件,位于 (< ".../user/vscode/extensions/<some-theme-name>/themes/<some-theme-name>.json"-- 请记住当您阅读路径名表明我是 Linux 人员)。

\n
\n

\xc2\xa0 \xc2\xa0 \xc2\xa0 VSCode 还执行其他操作,您可能会注意到,它使用与支持 JSON 文件中的注释相同的概念来执行此操作。VS-Code 有时会将非 JSON 文件视为 JSON 文件。它与.prettierrc.babelrc、 和许多其他方法一起执行此操作。通过支持.(*.)rcJSON 形式的 Dot-config 文件,可以将它们格式化为 JSON。

\n
ECMA-404
\n

由于 JSON 是开放标准,因此基于文本的语法有许多不同的实现。有些完全符合ECMA-404标准化,其他则仅部分符合,但是,ECMA JSON 标准的部分表示在开发社区中通常仍被称为 JSON。某些项目和/或公司不完全符合 JSON 标准的主要原因是向语法添加功能或语义。

\n

如果 JSON 不是开放标准,那么 VS-code 可能不会在法律上被允许创建 JSON 的自定义表示。只是因为 JSON 是 ECMA 标准,VSCode 才能够做到这一点。这就是为什么 JSON、ECMA 和 VSCode 如此出色,它们使用所有人都可以使用的工具和资源。

\n

这就是 VSCode 在其 JSON 文件中支持注释的方式:

\n

通常,当功能添加到 JSON 表示形式时,该表示形式将采用唯一的名称,该名称几乎始终与其文件扩展名相同(也是新的且唯一的)。现实世界的例子有(JSONC 和 JSON5)。添加新扩展的原因源于需要有不止一种类型的 JSON 解析器来处理 JSON 文件。VSCode 需要能够解析标准 JSON,并且如您所知,它解析 JSONC(带注释的 JSON),因此编辑器必须实现以下 2 个解析器:

\n

#1 JSON

\n
\n

\xc2\xa0 \xc2\xa0第一个解析器JSON是标准化 JSON 解析器,100% 符合 ECMA-404(2017) 文档实现的标准化。JSON 解析器解析 VSCode 中以.json文件扩展名结尾的所有文件(除非编辑器配置指示不要这样做)。该解析器在尝试解析注释时会抛出错误。

\n
\n

#2 JSONC

\n

\xc2\xa0 \xc2\xa0 \xc2\xa0 第二个解析器是JSONC(带注释的 JSON)。它负责解析所有使用该.jsonc 文件扩展名的文件。这被认为是不符合标准的 JSON(处理器/解析器)解析器,但是,该解析器确实支持注释。

\n

配置 VS-CodesJSON解析器将 JSON 解析为 JSONC

\n
\n
    //  FILE: "./.vscode/settings.json"\n   \n    // Example A\n    "files.associations": {\n        "*.json": "jsonc"\n    },\n\n    // Example B\n    "files.associations": {\n        "file-name-here.json": "jsonc" \n    }\n\n
Run Code Online (Sandbox Code Playgroud)\n
\n

上面的示例演示了在我看来,在与 VSCode 一起使用的 JSON 文件中添加注释支持的最佳方法。

\n
\n

1. 实施例A

\n

示例 A,将 JSON 文件声明为与 JSONC 文件类型关联。这告诉 VS-Code 使用 JSONC 解析器来解析 JSON 文件。

\n

2. 实施例B

\n

示例 B将特定文件声明为与 JSONC 文件类型关联。就像示例 A 中一样,VS-Code 现在知道使用 JSONC 解析器解析该文件。

\n
\n
\n
"files.associations": {...}这些图像演示了在前后图像对中的使用。
\n

JSON 注释示例\nJSON 注释示例

\n
您可以使用设置...
\n

"files.associations": {...}

\n
...不同用途的完整列表。其中一种用途是将 JSON 支持添加到不使用 ext.json但实现标准 JSON 语法的文件。“files.associations”的大多数用例都是针对非 JSON 的东西。对于任何勤奋使用 VS-Code 的人来说,它都是一个非常好的工具。
\n
在走之前,我需要提一下...
\n

陷阱

\n

JSON 并不总是缺乏对注释的支持。在 JSON 的初始定义标准化后,注释支持已从 JSON 中删除。删除它们的原因来自 Douglas Crockford \xe2\x80\x94,他被誉为 JSON 的成功 \xe2\x80\x94,他被引用说,是从 JSON 中删除注释的原因,如下所示

\n
\n

\xc2\xa0 \xc2\xa0 我从 JSON 中删除了注释,因为我看到人们使用它们来保存解析指令,这种做法会破坏互操作性。

\n
\n

换句话说,人们正在指示解析器解析他们的 JSON。这使得包含指令的文件无法在使用不同平台的另一个系统中操作。

\n

上面的观点非常好,应该指出的是,评论也提出了类似的问题。如果您支持 JSON 中的注释,并尝试在其他环境(例如不同的编辑器)中使用该 JSON 文件,则必须确保该编辑器也支持注释。这对您来说很简单,因为您记得文件中的内容,或者无论如何都记得其中的很大一部分。但是,当您将 JSON 文件传递​​给试图在不打开它的情况下解析它的人时,他们可能会收到错误,并且不知道原因。因此,我们需要小心添加注释支持的 JSON 文件。

\n