JSONSchema中additionalProperties字段的不同类型

时间:2014-02-19 04:10:27

标签: json jsonschema

我必须验证看起来像的JSON:

{
  "propertyName1" : "value",
  "propertyName2" : ["value1", "value2"],
  "propertyName3" : { "operator1" : "value" },
  "propertyName4" : { "operator2" : ["value1", "value2"] },
  ...
}

因此propertyName是一个任意键,并定义了运算符。

我想我应该使用如下的架构:

{
    "id" : "urn:my_arbitrary_json#",
    "type" : "object",
    "required" : false,
    "additionalProperties" : {
        "id" : "urn:my_arbitrary_key#",
        "type" : "object",
        "required" : true,
        "properties" : {
            "operator1" : { ... },
            "operator2" : { ... }
        }
    }
}

但是,此架构缺少propertyName1propertyName2个案的定义。我想定义一个数组来验证不同类型的additionalProperties,但根据规范,这是不正确的。有没有办法验证这样的JSON?

1 个答案:

答案 0 :(得分:1)

如果给定的数据可以有多种不同的形状,那么您可以使用oneOfanyOf。例如,你可以:

{
    "type" : "object",
    "additionalProperties" : {
        "oneOf": [
            {... string ...},
            {... array of strings ...},
            ...
        ]
    }
}

实际上,因为这里的选项都是不同类型,所以您可以在type中添加多个条目:

{
    "type" : "object",
    "additionalProperties" : {
        "type": ["string", "array", "object"],
        "items": {"type": "string", ...}, // constraints if it's an array
        "properties": {...} // properties if it's an object
    }
}