У меня есть json документ, который я пытаюсь проверить с помощью этой формы:
...
"products": [{
"prop1": "foo",
"prop2": "bar"
}, {
"prop3": "hello",
"prop4": "world"
},
...
Существует несколько различных форм, которые может принимать объект. Моя схема выглядит следующим образом:
...
"definitions": {
"products": {
"type": "array",
"items": { "$ref": "#/definitions/Product" },
"Product": {
"type": "object",
"oneOf": [
{ "$ref": "#/definitions/Product_Type1" },
{ "$ref": "#/definitions/Product_Type2" },
...
]
},
"Product_Type1": {
"type": "object",
"properties": {
"prop1": { "type": "string" },
"prop2": { "type": "string" }
},
"Product_Type2": {
"type": "object",
"properties": {
"prop3": { "type": "string" },
"prop4": { "type": "string" }
}
...
Кроме того, некоторые свойства отдельных объектов массива продуктов могут быть перенаправлены при дальнейшем использовании anyOf
или oneOf
.
I сталкиваюсь с проблемами в VSCode, используя встроенную схему проверки, где он выдает ошибки для каждого элемента в массиве products
, которые не совпадают с Product_Type1
.
Так что, кажется, валидатор фиксирует это сначала oneOf
он обнаружил и не будет проверять ни один из других типов.
Я не нашел никаких ограничений для механизма oneOf
на jsonschema.org. И здесь нет упоминаний о том, что он используется на странице, специально посвященной массивам: https://json-schema.org/understanding-json-schema/reference/array.html
Возможно ли то, что я пытаюсь сделать?