`schema'的`true`值的定义行为在哪里?

时间:2018-04-14 16:59:59

标签: jsonschema json-schema-validator

draft-07enum属性定义为:

    "enum": {
        "type": "array",
        "items": true,
        "minItems": 1,
        "uniqueItems": true
    },

但是SPEC没有定义true值:

  

“items”的值必须是有效的JSON Schema或有效的JSON Schema数组。

请将我链接到SPEC在true代替schema

的情况下定义验证者行为的点

2 个答案:

答案 0 :(得分:2)

http://json-schema.org/latest/json-schema-core.html#rfc.section.4.3.1

  

布尔架构值" true"和"假"无论实例值如何,都是无关紧要的断言。例如,就验证词汇表而言,布尔模式等同于以下行为:

     

     
      
  • 始终通过验证,就像空架构{}
  • 一样   
     

     
      
  • 始终未通过验证,就像架构{" not":{}}
  • 一样   

答案 1 :(得分:0)

布尔true值本身就是一个有效的JSON模式,因此枚举规范符合自己的规范。

作为参考,规范定义如下,明确允许根处的布尔值:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  ...
  "type": [
    "object",
    "boolean"
  ],
  ...
}

如果我们想验证是否允许"items": true,我们需要先查找items属性的规范。这正式定义如下:

"items": {
    "anyOf": [
        { "$ref": "#" },
        { "$ref": "#/definitions/schemaArray" }
    ],
    "default": true
},

这意味着items属性的允许值是JSON Schema(因为它引用了spec模式的根对象),或者它是JSON模式的数组)。在这种情况下,我们需要验证true是否符合根模式##/definitions/schemaArray定义。因此,让我们首先查看指定类型为["object", "boolean"]的根模式。由于true是布尔值,因此我们已成功验证属性true的值items确实有效。