JSON模式所有可能的枚举组合



我目前正在起草一些数据示意大模式。假设我的模式是这种形式:

{
    "$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"]
    }
}

我的问题是,是否可以指定我们需要property1property2值的所有可能组合(以任何顺序没有重复(?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
     }
]}

枚举值可以是对象,您可以在对象级别上使用它。

我很确定可以做到,但是解决方案是如此复杂和不可读取,以至于不值得这样做。在您的情况下,我无法确定,但是通常情况下,这种情况表明您如何设计数据结构是一个糟糕的选择。我会研究您如何重组数据。

最新更新