如何确保数组中不超过一个项在JSON模式中具有特定值



给定这样的JSON数组:

[
{
"description": "Foo",
"selected": false
},
{
"description": "Bar",
"selected": true
},
{
"description": "Baz",
"selected": false
}
]

使用以下模式进行验证:

{
"$schema": "http://json-schema.org/draft/2019-09/schema",
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1
},
"selected": {
"type": "boolean"
}
},
"required": [
"description",
"selected"
]
}
}

只有在不超过一个项的selected属性设置为true的情况下,才能修改架构以使数组通过验证?也就是说,零个或一个具有该值的对象将被视为有效,但两个或多个对象则无效。

您可以使用contains/minContains/maxContains关键字来执行此操作。contains表示数组中至少有一个项必须通过给定的架构。minContainsmaxContains允许您指定contains可以匹配的项目数的上限和下限。

下面的模式说,数组中必须有0到1个项目,这些项目是一个名为"的属性的对象;选择";其值为CCD_ 10。

{
...
"contains": {
"type": "object",
"properties": {
"selected": { "const": true }
},
"required": ["selected"]
},
"minContains": 0,
"maxContains": 1
}

注意,minContainsmaxContains在草案2019-09中是新的。在此之前,没有好的方法来限制contains可以匹配的项目数量。在尝试https://json-schema.hyperjump.io

最新更新