схема json для проверки массива объектов с требованиями anyOf и oneOf

Я пытаюсь определить схему 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 первого элемента, то проверка неудачи. То же самое со вторым элементом массива не вызывает желаемого сбоя. Как я могу гарантировать, что проверка выполняется для каждого члена массива?

1 ответов


это потому, что вы (случайно) использовали "tuple typing". Это включено, когда значение "items" является массивом, и он соответствует схемам конкретные должности в массиве.

Если вы измените "items" (в вашей схеме), чтобы быть просто схемой (а не массив схем), то он будет проверять все элементы одинаково.