在JSON Schema中为数组中的maxItems属性赋值等于某个其他属性

时间:2014-12-22 06:52:36

标签: json jsonschema json-schema-validator

我有一个名为pageCount的属性,它是一个数字,后跟一个基于页码的信息数组。现在,我想将数组中的maxItems设置为等于pageCount的值。有办法可以做到吗?我看到的大多数地方实际上都使用数字来定义maxItems,但是我们可以为模式本身赋予其中一个属性的值吗?

            "pageCount": {
                    "type":"number",
                    "mininum": 1,
                    "required":true
            },
            "pages": {
                    "type":"array",
                    "required":true,
                    "minItems": 1,
                    "maxItems" : <to be set as the the value of pageCount??>

1 个答案:

答案 0 :(得分:3)

从json-schema Draft v04开始,你不能使用&#34;属性值&#34;限制minItems。根据minItems标准的现状:

  

此关键字的值必须是整数。这个整数必须是   大于或等于0。

如果你有少量的&#34; minItems&#34;不同的选项,你可以为每个选项编写一个模式,如:

"minArrayItems" : {
    "type" : "array",
    "minItems" : 1
}

然后通过$ ref:

引用它
"allOf" : { {
        "$ref" : "#/definitions/minArrayItems"
    }
}

这样你就可以间接地修改值(只需要修改minArrayItems)。

另一种选择是添加预处理步骤并以动态方式构建模式。

最佳选择取决于您的实际情况。