vscode [json] 本地JSON模式应该根据其id字段相互查找

yhuiod9q  于 6个月前  发布在  Vscode
关注(0)|答案(2)|浏览(68)

我有一个JSON模式,它看起来像这样:

{
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "$id": "https://example.com/item.json",
  "allOf": [{
    "$ref": "https://example.com/definitions.json#/$defs/object"
  }]
}
{
  "$schema": "https://json-schema.org/draft/2019-09/schema",
  "$id": "https://example.com/definitions.json",
  "$defs": {
    "object": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        }
      }
    }
  }
}

我想能够在VSCode中编辑它们,将所有的 $ref 解析为它们的本地对应项。这可以通过VSCode解析 $id 字段并根据 $id 从远程URL确定到本地文件的Map来实现。

cgfeq70w

cgfeq70w1#

我也在寻找这个功能。我有一个使用这些模式的模式和文档的存储库,只是它们被组织成文件结构。这意味着每当我深入到文档中的另一个文件夹时,我必须将 ../ 添加到我的文档中的 $schema$ref 中,以引用相同的本地文件。如果所有模式都可以在一个工作区中通过它们的 $id 加载到列表中,当你在 $ref$schema 中开始输入域名时,就可以自动完成。

dxpyg8gm

dxpyg8gm2#

我也在寻找一个简单的解决方案,让我的JSON模式在本地解析。我想收集我的发现。
在一个相关的问题(#174672)中建议使用json.schemas设置和file://协议。然而,当我尝试引用一个相对文件时,我无法让VSCode加载正确的模式,原因如下:

  1. 使用file://协议时,不可能使用相对路径
  2. 在模式引用中([json] $schema: support predefined variables like ${workspaceFolder} #166438),不能使用${workspaceFolder}
  3. 直接使用相对路径将简单地附加到HTTPS URI(我不确定这是否是预期的行为)
    作为备注,可以使用fileMatch字段,但需要特定的路径命名约定,这并不总是期望的行为。
    按照这个问题的建议,通过ID解析所有模式是最简单的!另一种方法可以是遵循#166438的建议,并在json.schemas配置字段中利用$ref字段。

相关问题