2

我有一个名为 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??>
4

1 回答 1

3

从 json-schema Draft v04 开始,您不能使用“属性值”来限制 minItems。根据 minItems 标准的当前状态:

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

如果您有少量“minItems”不同的选项,您可以为每个选项编写一个模式,例如:

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

然后通过 $ref 引用它:

"allOf" : { {
        "$ref" : "#/definitions/minArrayItems"
    }
}

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

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

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

于 2014-12-22T07:47:41.017 回答