JSON模式 - 如何使用oneOf

时间:2015-05-18 08:49:38

标签: json jsonschema

以下是根据PEP0263http://jsonlint.com/的有效JSON架构。

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "required": ["results"],
    "additionalProperties": false,
    "properties": {
        "results": {
            "type": "string",
            "oneOf": [
                { "result": "1" },
                { "result": "2" },
                { "result": "3" },
                { "result": "4" }
            ]
        }
    }
}

以下JSON在针对上述架构进行验证时报告错误(results is the wrong type):

{
    "results" : {
        "result": "1"
    }
}

有人可以建议我如何解决此错误吗?

2 个答案:

答案 0 :(得分:13)

在这种情况下,您看起来像$routechangestart而不是enum。以下是定义架构的方法。

oneOf

但问题是如何正确使用{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "required": ["results"], "additionalProperties": false, "properties": { "results": { "type": "object", "properties": { "result": { "type": "string", "enum": ["1", "2", "3", "4"] } } } } } oneOf关键字应该是一个模式数组,而不是您在示例中使用的值。 oneOf中只有一个模式必须验证要验证的oneOf子句的数据。我必须稍微修改您的示例以说明如何使用oneOf。此示例允许oneOf为字符串或整数。

result

答案 1 :(得分:2)

根据您的架构定义,

resultsobject的类型,但您提到的类型为String。如果我将类型更改为object,它就可以正常工作。