JSON模式中的自动`$ schema`支持?

时间:2017-05-10 12:15:13

标签: json jsonschema

我想描述这个JSON:

{
  "key1": {},
  "key2": {}
}

所以我创建了这个JSON模式:

{
  "type": "object",
  "patternProperties": {
    ".+": {
      "type": "object"
    }
  }
}

问题在于,当我向JSON添加$schema链接时,它无效:

JSON schema error

首先,$schema需要任何特殊处理似乎很奇怪,但即使我尝试这样做:

{
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string"
    }
  },
  "patternProperties": {
    ".+": {
      "type": "object"
    }
  }
}

它没有修复:

err

我在http://schemastore.org/json/浏览了几个模式,他们似乎没有对$schema进行任何特殊处理。它是如何工作的?

2 个答案:

答案 0 :(得分:1)

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

然后使用验证程序将架构与JSON数据进行匹配。例如,您可以使用this validator。在左侧,您指定右侧指定JSON数据的架构(没有任何引用或链接到架构,您不在右侧使用$ schema关键字)

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

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

更多信息here

答案 1 :(得分:1)

接受的答案是正确的,但这是您需要的解决方法。

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

additionalProperites仅适用于properties中定义的属性。另一方面,patternProperties适用于它匹配的任何财产。使用patternProperties编写它的方式意味着“$ schema”必须是字符串它必须是一个对象。由于这两件事情都不可能都是真的,“$ schema”永远不会以任何价值验证。