我目前正在起草一些数据示意大模式。假设我的模式是这种形式:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Title",
"type": "array",
"items": {
"type":"object",
"properties":{
"property1": {
"type": "string",
"enum": ["ALPHA", "BETA"]
},
"property2": {
"type": "string",
"enum": ["alpha", "beta"]
},
"val": {
"type": "number",
"min": 0,
"max": 100
}
},
"required": ["property1", "property2", "val"]
}
}
我的问题是,是否可以指定我们需要property1
和property2
值的所有可能组合(以任何顺序没有重复(?val
的值几乎肯定不是唯一的。
我所能想到的就是将"minItems": 4, "maxItems": 4,
添加到"items"
对象上方的架构中,但这仅意味着我们将最终得到4个项目,并且不能保证它们将是唯一的。
我不是要任何人为我编写整个架构,只是在寻找文档的指针,或者简单的示例,以将我推向正确的方向。
测试用例(包括以澄清我的观点(
这应该失败,因为其中一种组合缺失
{"data":[
{
"property1": "ALPHA",
"property2": "alpha",
"val": 7
},{
"property1": "ALPHA",
"property2": "beta"
"val": 16
},{
"property1": "BETA",
"property2": "alpha"
"val": 12
}
]}
这应该失败,因为重复了其中一种组合
{"data":[
{
"property1": "ALPHA",
"property2": "alpha"
"val": 73
},{
"property1": "ALPHA",
"property2": "beta"
"val": 72
},{
"property1": "BETA",
"property2": "alpha"
"val": 73
},{
"property1": "BETA",
"property2": "beta"
"val": 71
},{
"property1": "ALPHA",
"property2": "beta"
"val": 68
}
]}
这应该通过
{"data":[
{
"property1": "ALPHA",
"property2": "alpha"
"val": 26
},{
"property1": "ALPHA",
"property2": "beta"
"val": 26
},{
"property1": "BETA",
"property2": "alpha"
"val": 32
},{
"property1": "BETA",
"property2": "beta"
"val": 83
}
]}
这也应该通过
{"data":[
{
"property1": "ALPHA",
"property2": "beta"
"val": 15
},{
"property1": "BETA",
"property2": "alpha"
"val": 6
},{
"property1": "ALPHA",
"property2": "alpha"
"val": 65
},{
"property1": "BETA",
"property2": "beta"
"val": 37
}
]}
枚举值可以是对象,您可以在对象级别上使用它。
我很确定可以做到,但是解决方案是如此复杂和不可读取,以至于不值得这样做。在您的情况下,我无法确定,但是通常情况下,这种情况表明您如何设计数据结构是一个糟糕的选择。我会研究您如何重组数据。