不同类型的数组的JSON模式

时间:2015-12-05 15:54:50

标签: json validation jsonschema

我有非常基本的架构,表现得有些奇怪。

{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": 
{
    "$out": 
    {
        "type": "array",
        "minItems": 1,
        "items": {
            "oneOf": [
                { "type": "string" },
                { "$ref": "#/definitions/alias" }
            ]
        }
    }
},
"definitions": 
{
    "alias": 
    {
        "properties": 
        {
            "$source": { "type": "string" },
            "$alias": { "type": "string" }
        },
        "required": [ "$source", "$alias" ],
        "additionalProperties": false
    }
}

}

如果我使用以下JSON进行测试:

{
    "$out": [
        "12w",
        { "$source": "WH.Code", "$alias": "WarehouseCode"}
    ] 
}

它失败了(sample)说数组中的字符串元素多于一个模式。如果我更改对别名的引用'只说{"类型":"字符串"它按预期工作。我做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您使用的所有关键字(// somewhere before: Writer underlyingWriter = /* get the underlying writer from somewhere */; XMLStreamWriter xmlStreamWriter = factory.createXmlStreamWriter(underlyingWriter); xmlStreamWriter.flush(); underlyingWriter.write(rawXML); underlyingWriter.flush(); // carry on using the XMLStreamWriter propertiesrequired)仅在值为对象时才适用。因为没有任何东西要求值是一个对象,所以任何不是对象的东西都会通过。仅当对象关键字是对象时才考虑它们。

您可以通过多种方式使架构正常工作,但最直接的方法是将additionalProperties添加到"type": "object"架构中。