【问题标题】:json schema to validate array of objects with anyOf and oneOf requirementsjson 模式来验证具有 anyOf 和 oneOf 要求的对象数组
【发布时间】:2013-11-20 15:50:54
【问题描述】:

我正在尝试定义一个 json 模式来限制数组中包含的对象的属性。

到目前为止我所拥有的是:

{
    "title":"myCollection",
    "properties":{
        "things":{
            "type":"array",
            "items":[{
                "title":"thingObj",
                "type":"object",
                "properties":{
                    "name":{
                        "type":"string"
                    },
                    "code":{
                        "type":"string"
                    },
                    "type":{
                         "type":"string",
                         "enum":["dog","cat"]
                    },
                    "rate":{
                        "type":"number"
                    },
                    "value":{
                        "type":"number"
                    }
                },
                "anyOf":[{
                    "properties":{
                        "name":{
                            "type":"string"
                        }
                    },"required":["name"]
                },{
                    "properties":{
                        "code":{
                            "type":"string"
                        }
                    },"required":["code"]
                },{
                    "properties":{
                        "type":{
                            "type":"string",
                            "enum":["new","existing"]
                        }
                    },"required":["type"]
                }],
                "oneOf":[{
                    "properties":{
                        "rate":{
                            "type":"number"
                        }
                    },
                    "required":["rate"]
                },{
                   "properties":{
                       "value":{
                            "type":"number"
                       }
                   },
                   "required":["value"]
                }],
                "additionalProperties":false
            }]
        }
    }
}

现在给出以下 jsonobj:

{
    "things": [
        {
            "name": "tabby", 
            "code": "meeow", 
            "type": "cat", 
            "value": 20
        }, 
        {
            "name": "k9", 
            "code": "woofer", 
            "type": "dog",
            "rate": 15
        }
    ]
}

这个json schema validator 提供了一个有效的响应,但这个验证似乎只适用于数组中的第一个元素。如果删除第一个元素的 anyOf 子句或 oneOf 子句中包含的所有字段,则验证失败。第二个数组元素上的相同不会引发所需的失败。如何确保针对每个数组成员运行验证?

【问题讨论】:

    标签: json validation jsonschema


    【解决方案1】:

    这是因为您(不小心)使用了“元组输入”。这在"items" 的值是一个数组时启用,并且它将模式与数组中的特定位置相匹配。

    如果您将 "items"(在您的架构中)更改为简单的架构(而不是架构数组),那么它将以相同的方式验证所有项目。

    【讨论】:

    • 您在七(!)年前回答了这个问题,但是您能否详细说明“如果您将“项目”(在您的架构中)更改为简单的架构(而不是数组)的含义模式),那么它将以相同的方式验证所有项目。”。我一直在尝试定义一个数组,其中可能有不同数量的项目遵循相同的模式选择。
    【解决方案2】:

    感谢@cloudfeet 的回答,在看到他的回答之前,我一直在努力解决这个问题。 更清楚地说,应该删除项目周围的 []。

    {
        "title":"myCollection",
        "properties":{
            "things":{
                "type":"array",
                "items":**[**{
                    "title":"thingObj",
                    "type":"object",
                    .
                    .
                    .
                       "required":["value"]
                    }**]**,
                    "additionalProperties":false
                }]
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      相关资源
      最近更新 更多