JSON模式:类型中的模式

时间:2016-08-15 07:46:34

标签: json jsonschema

我正在尝试创建一个复杂的JSON模式,尝试使用条件依赖项而无需访问OneOf,AnyOf等

我基本上试图结合

brew

const schema1 = {
    type: "object",
    properties: {
        q1: {
            type: "boolean",
            enum: [false]
        }
    },
    required: ["q1"]
}

进入一个模式const schema2 = { type: "object", properties: { q1: { type: "boolean", enum: [true] } sq1: { type: "boolean" } }, required: ["q1", "sq1"] } ,因此如果combined_schema的答案为真,则模拟需要sq1答案的条件依赖项。

在JSON架构wiki中,我读到AnyOf会替换"架构"在类型"但是看一下这个例子我不确定如何在特定情况下使用它({" schema1":" here"}部分非常令人困惑。

https://github.com/json-schema/json-schema/wiki/anyOf,-allOf,-oneOf,-not

有人可以帮助我将维基示例应用于我的现实世界问题吗?

2 个答案:

答案 0 :(得分:1)

您的答案不是有效的JSON架构的架构。您可以使用anyOf关键字执行此操作:

{
    type: "object",
    required: ["q1"]
    anyOf: [
        {
            properties: {
                q1: { enum: [false] } // no need for type here
            }
        },
        {
            properties: {
                q1: { enum: [true] },
                sq1: { type: "boolean" }
            },
            required: ["sq1"]
        }
    ]
}

switch中实施的JSON-Schema v5提案中还有关键字Ajv(免责声明:我创建了它)。

答案 1 :(得分:0)

我找到了答案。他们的关键是使用refs

{
    "type": [
                {"$ref": "#/schema1"},
                {"$ref": "#/schema2"}
            ],
    "schema2":{
        "type": "object",
        "properties": {
            "q1": {
                "type": "boolean",
                "enum": [true]
            },
            "sq1": {
                "type": "boolean"
            }
        },
    "required": ["q1", "sq1"]
    },
    "schema1": {
        "type": "object",
        "properties": {
            "q1": {
                "type": "boolean",
                "enum": [false]
            }
        },
        "required": ["q1"]
    }
}