JSON模式中是否自动支持“$schema”?

JSON模式中是否自动支持“$schema”?,json,jsonschema,Json,Jsonschema,我想描述一下这个JSON: { "key1": {}, "key2": {} } 所以我创建了这个JSON模式: { "type": "object", "patternProperties": { ".+": { "type": "object" } } } 问题是,当我向JSON添加$schema链接时,它是无效的: 首先,$schema需要任何特殊处理,这似乎很奇怪,但即使我尝试了以下方法: { "type": "object",

我想描述一下这个JSON:

{
  "key1": {},
  "key2": {}
}
所以我创建了这个JSON模式:

{
  "type": "object",
  "patternProperties": {
    ".+": {
      "type": "object"
    }
  }
}
问题是,当我向JSON添加
$schema
链接时,它是无效的:

首先,
$schema
需要任何特殊处理,这似乎很奇怪,但即使我尝试了以下方法:

{
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string"
    }
  },
  "patternProperties": {
    ".+": {
      "type": "object"
    }
  }
}
它不是固定的:


我在上浏览了一些模式,它们似乎没有对
$schema
进行任何特殊处理。它是如何工作的?

使用$schema关键字声明JSON片段实际上是JSON模式的一部分。 但当它不是模式时,它不会在JSON中使用,也就是说,它不会在JSON数据中使用

然后使用验证器将模式与JSON数据相匹配。例如,您可以使用。在左边指定模式,在右边指定JSON数据(没有对模式的任何引用或链接,在右边不使用$schema关键字)

$schema关键字指定模式应用于哪个版本的JSON模式标准(同样是JSON模式,而不是JSON数据)。大部分时间是:

"$schema": "http://json-schema.org/draft-04/schema#"

更多信息

使用$schema关键字声明JSON片段实际上是JSON模式的一部分。 但当它不是模式时,它不会在JSON中使用,也就是说,它不会在JSON数据中使用

然后使用验证器将模式与JSON数据相匹配。例如,您可以使用。在左边指定模式,在右边指定JSON数据(没有对模式的任何引用或链接,在右边不使用$schema关键字)

$schema关键字指定模式应用于哪个版本的JSON模式标准(同样是JSON模式,而不是JSON数据)。大部分时间是:

"$schema": "http://json-schema.org/draft-04/schema#"

更多信息

公认的答案是正确的,但以下是您需要的解决方法

{
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string"
    }
  },
  "additionalProperties": {
    "type": "object"
  }
}

附加属性
仅适用于在
属性
中定义的属性<另一方面,代码>模式属性适用于它匹配的任何属性。使用
patternProperties
编写它的方式意味着“$schema”必须是字符串,并且必须是对象。由于这两件事不可能都是真的,“$schema”永远不会用任何值进行验证。

公认的答案是正确的,但这里是您需要的解决方法

{
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string"
    }
  },
  "additionalProperties": {
    "type": "object"
  }
}

附加属性
仅适用于在
属性
中定义的属性<另一方面,代码>模式属性适用于它匹配的任何属性。使用
patternProperties
编写它的方式意味着“$schema”必须是字符串,并且必须是对象。因为这两件事永远不会都是真的,“$schema”永远不会用任何值进行验证。

有趣的是,VSCode使用的这种方法是非标准的吗?这似乎是非常令人惊讶的,那么VSCode使用的这种方法是非标准的吗?看来是的,汉克斯,这很有用。归根结底,我并不认为向JSON本身添加
$schema
是正确的,它还可能影响我以前没有想到的运行时行为,因此我找到了在VSCode中将模式映射到JSON的其他方法,并打开了这个问题:只有将其视为内置关键字而不是数据模型的一部分时,它才是不正确的。文档自我描述当然不是坏事。VSCode想出了一种方法来实现这一点,只要他们不强迫程序员做出这样的决定就行了。我认为情况并非如此,因为你说你找到了一个适合自己的解决方法。谢谢,这非常有用。归根结底,我并不认为向JSON本身添加
$schema
是正确的,它还可能影响我以前没有想到的运行时行为,因此我找到了在VSCode中将模式映射到JSON的其他方法,并打开了这个问题:只有将其视为内置关键字而不是数据模型的一部分时,它才是不正确的。文档自我描述当然不是坏事。VSCode想出了一种方法来实现这一点,只要他们不强迫程序员做出这样的决定就行了。我认为情况并非如此,因为你说你找到了一个你感到舒服的解决办法。