如何配置 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 支持)?的主要内容,如果未能解决你的问题,请参考以下文章