在JSON Schema中,如何解析冲突的“additionalProperties”?

时间:2017-12-11 14:03:56

标签: json jsonschema

在JSON Schema中如果我们有“additionalProperties”:在根级别为false并且“additionalProperties”:true嵌套我们如何解决这个假定的“冲突”

例如

{
"id": "someId",
"type": "object",
"additionalProperties": false,
"properties": {
    "storage": {
        "type": "object",
        "additionalProperties": true
        "properties": {
            "type": { "enum": [ "disk" ] },
            "device": {
                "type": "string",
                "pattern": "^/dev/[^/]+(/[^/]+)*$"
            }
        },
        "required": [ "type", "device" ]
    }
}   

}

是否覆盖了另一个?

2 个答案:

答案 0 :(得分:2)

他们不会覆盖。它们的范围仅限于JSON模式级别。

答案 1 :(得分:2)

JSON Schema是一个约束系统,因此您只能添加约束,永远不会删除它们。如果同时适用html,body"additionalProperties": true,则效果就像只有"additionalProperties": false一样(因为它是更严格的约束)。

此外,false仅“知道”同一架构对象中的additionalPropertiesproperties。它无法“看到”子模式(内联或引用)。因此,上面的架构不允许任何属性。

请注意,在草案08中可能会添加一个可以“看到”子文档的类似关键字,尽管我们还没有弄清楚它是如何工作的。目前,没有JSON Schema关键字以这种方式运行,因此添加这样的功能是一项复杂的工作。但这是08年草案的主要目标。