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" 永远不会验证任何值。