JSON 模式中的自动 `$schema` 支持?
Automatic `$schema` support in JSON schema?
我要描述这个JSON:
{
"key1": {},
"key2": {}
}
所以我创建了这个 JSON 模式:
{
"type": "object",
"patternProperties": {
".+": {
"type": "object"
}
}
}
问题是,当我将 $schema
link 添加到 JSON 时,它无效:
首先,$schema
需要任何特殊处理似乎很奇怪,但即使我尝试这样做:
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
}
},
"patternProperties": {
".+": {
"type": "object"
}
}
}
未修复:
我在 http://schemastore.org/json/ 浏览了几个模式,它们似乎没有对 $schema
进行任何特殊处理。它是如何工作的?
$schema 关键字用于声明一个JSON 片段实际上是JSON Schema 的一个片段。
但是当它不是模式时,它不会在您的 JSON 中使用,即它不会在您的 JSON 数据中使用。
然后您使用验证器将架构与 JSON 数据进行匹配。例如,您可以使用 this validator。在左侧指定架构,在右侧指定 JSON 数据(没有对架构的任何引用或 link,您不在右侧使用 $schema 关键字)
$schema 关键字指定该架构适用于哪个版本的 JSON 架构标准(同样是 JSON 架构,而不是 JSON 数据)。大多数时候是:
"$schema": "http://json-schema.org/draft-04/schema#"
更多信息here
接受的答案是正确的,但这是您需要的解决方法。
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
}
},
"additionalProperties": {
"type": "object"
}
}
additionalProperites
仅适用于 properties
中定义的属性。另一方面,patternProperties
适用于它匹配的任何 属性。你用 patternProperties
写的方式意味着 "$schema" 必须是一个字符串 而 它必须是一个对象。由于这两件事永远不可能同时为真,"$schema" 永远不会验证任何值。
我要描述这个JSON:
{
"key1": {},
"key2": {}
}
所以我创建了这个 JSON 模式:
{
"type": "object",
"patternProperties": {
".+": {
"type": "object"
}
}
}
问题是,当我将 $schema
link 添加到 JSON 时,它无效:
首先,$schema
需要任何特殊处理似乎很奇怪,但即使我尝试这样做:
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
}
},
"patternProperties": {
".+": {
"type": "object"
}
}
}
未修复:
我在 http://schemastore.org/json/ 浏览了几个模式,它们似乎没有对 $schema
进行任何特殊处理。它是如何工作的?
$schema 关键字用于声明一个JSON 片段实际上是JSON Schema 的一个片段。 但是当它不是模式时,它不会在您的 JSON 中使用,即它不会在您的 JSON 数据中使用。
然后您使用验证器将架构与 JSON 数据进行匹配。例如,您可以使用 this validator。在左侧指定架构,在右侧指定 JSON 数据(没有对架构的任何引用或 link,您不在右侧使用 $schema 关键字)
$schema 关键字指定该架构适用于哪个版本的 JSON 架构标准(同样是 JSON 架构,而不是 JSON 数据)。大多数时候是:
"$schema": "http://json-schema.org/draft-04/schema#"
更多信息here
接受的答案是正确的,但这是您需要的解决方法。
{
"type": "object",
"properties": {
"$schema": {
"type": "string"
}
},
"additionalProperties": {
"type": "object"
}
}
additionalProperites
仅适用于 properties
中定义的属性。另一方面,patternProperties
适用于它匹配的任何 属性。你用 patternProperties
写的方式意味着 "$schema" 必须是一个字符串 而 它必须是一个对象。由于这两件事永远不可能同时为真,"$schema" 永远不会验证任何值。