如何配置 VS Code 以启用 .json 文件的代码完成(jsonschema 支持)?

Posted

技术标签:

【中文标题】如何配置 VS Code 以启用 .json 文件的代码完成(jsonschema 支持)?【英文标题】:How do I configure VS Code to enable code completion on .json files (jsonschema support)? 【发布时间】:2015-07-15 09:48:05 【问题描述】:

在Visual Stuido Code demo 分钟 28:57-29:20 和 30:20-31:10,显示了一些很酷的 JSON 代码完成。

在哪里以及如何将我的 JSON 文件的架构添加到项目中?

VS Code 如何知道给定.json 文件使用哪个架构?

【问题讨论】:

此链接可能对您有所帮助:blogs.msdn.com/b/webdev/archive/2014/04/11/… 迈克尔,我已经更新了我的答案。这不是你要找的吗?我相信您的问题是期望 JSON Schema 的下落能够获得智能感知,尤其是在 VS Code 中。 如果不是,我希望在我的答案中没有对齐\工作。 @AshokanSivapragasam - 这不是您的答案是否有效的问题,而是您的答案是否适用于所有用例 - 特别是 OP 的原始案例。添加间接级别的能力是指定一个 URL 内置到 vscode 中是有原因的。 (有关详细信息,请参阅我对您的回答的评论。)我希望这会让您感觉更好。 @CraigHicks,是的,我认为我的回答与其他一些问题一致,该问题期望按模式完成独立 json 文件的代码。 :) 【参考方案1】:

JSON 模式与文件的关联在属性“json.schemas”下的设置(文件、首选项、用户设置或工作区设置)中完成。

这是 bower 的 JSON 模式如何与 bower 模式关联的示例。

"json.schemas": [
    
        "fileMatch": [
            "/bower.json",
            "/.bower.json"
        ],
        "url": "http://json.schemastore.org/bower"
    ,
    ...

您还可以使用工作区中的架构或直接在设置本身中定义架构。查看https://code.visualstudio.com/docs/languages/json 获取示例。

【讨论】:

要与团队成员共享设置,我必须将其保存为工作区设置并将 .settings/settings.json 检入 (git/SVN...) 存储库。 不幸的是,这在两种情况下不起作用:1.当我有一个包含自己的子模块时 .settings/settings.json (不考虑)。 2. 如果我打开一个子目录,那么父目录中的.settings/settings.json 也会被忽略。我认为它应该像.gitignore.jshint 等一样工作。否则我们又回到了旧的刚性 IDE 的世界。 如果文档能解释可以使用哪些模式会很好(例如**.foo.json @martin-aeschlimann 如果我们需要来自项目根文件夹本身的自动建议,您知道如何使其工作吗?我们有整个项目 repo,只有 JSON 文件,我们需要 VSCODE 来引用项目根目录及其所有 JSON 文件,以便在编写新的 .json 文件时建议 JSON 密钥?【参考方案2】:

我让 VS Code 使用 JSON 模式的三种方式是......

因此对于来自 ...http://json.schemastore.org

的Azure函数架构
"json.schemas": [
  
    "fileMatch": [
      "/function.json"
    ],
    "url": "http://json.schemastore.org/function"
  
]

    用户设置中,即在'C:\Users\\AppData\Roaming\Code\User'中作为用户settings.json中的一个元素

    李>

    “工作区设置” 中,然后在 .code-workspace 文件中的“设置”部分... 假设您使用的是 VS Code 工作区

    “文件夹设置”中,它是settings.json 中的“设置”部分,位于.vscode 目录中... 假设您正在使用一个 VS 代码工作区

文件夹优先于工作区,工作区优先于用户

并且工作区和文件夹使用相对路径,例如在.code-workspace 文件中...

"settings": 
  "json.schemas": [
    
      "fileMatch": [
        "/task.json"
      ],
      "url": "./schema/tasks.schema.json"
    
  ]

或在文件夹设置settings.json\.vscode\ ...

"json.schemas": [
  
    "fileMatch": [
      "/task.json"
    ],
    "url": "./schema/tasks.schema.json"
  
]

【讨论】:

【参考方案3】:

您可以在 $schema 节点中引用您的 JSON Schema,并立即在 VS Code 中获得智能感知。无需在其他任何地方进行配置。

例如,

"$schema": "http://json.schemastore.org/coffeelint", “line_endings”:“unix”

这就是我所说的智能感知。 JSON Schema 在您当前的光标位置具有可能的 JSON 属性列表,VS Code 可以提取该智能感知列表。

请注意,每个官方 JSON 都应该有一个具体的 JSON Schema 来证明数据的完整性。这个答案仍然有效!

【讨论】:

@michael-scharf,如果有帮助并发现正确,则标记为答案。 好点,这里是直接将架构添加到 JSON 文件的资源code.visualstudio.com/docs/languages/json#_mapping-in-the-json 架构 ID 只是 URI。因此,除非 VSCode 可以从某个全局服务器查找架构或将 id 本身作为 URL 读取,否则这可能不起作用。 @ChristopherBarber,VS Code 和 VS 从服务器或本地文件下载架构,并建议从 JSON 文件中的当前光标位置列出可能的 JSON 元素列表。如果不工作,你怎么看?它对我有用 这个答案不是唯一答案的原因:(1) '$schema' 本身可能不是有效属性,例如,当模式支持添加到现有软件时。 (2) 指定模式 URI 的间接级别提供了灵活性,例如,对于开发来说,可能首选本地 URI,因为模式正在迅速变化,或者如果 URI 更改为新的,则可以在系统/项目/用户级别,而不是更新每个文件。 Vscode 特意内置了该功能以允许一定程度的间接性。这不是一个偶然的错误。

以上是关于如何配置 VS Code 以启用 .json 文件的代码完成(jsonschema 支持)?的主要内容,如果未能解决你的问题,请参考以下文章

json VS Code配置覆盖文件

vs code 调试nodejs项目配置文件

json VS Code Chrome调试器 - 如何配置

如何在 VS Code 中为 .jsx 文件启用自动更漂亮的格式?

如何使用VS Code调试npm本身(不是我的代码)?

VS Code配置链接库文件