Вот схема JSON и JSON, как показано ниже в ссылке для целей иллюстрации.
Схема JSON и JSON
Формат: отдельный объект JSON(с их дополнительными атрибутами и может варьироваться в зависимости от другого объекта в массиве) внутри массива может быть любой 3 региона: «Америка», «Азия» и «Европа» и, по крайней мере, тип объекта региона должен быть там. Это может быть достигнуто с помощью свойства minItems для массива)
Постановка задачи:
Отдельный объект JSON в массиве может относиться к любому 3 регионам: «америка», «азия»и 'europe' и, по крайней мере, тип объекта региона должен быть там
==> Я могу решить эту проблему, поместив все объекты региона в массив anyOf, как я хочу, чтобы они соответствовали по крайней мереодин из допустимых объектов региона.
Либо объект JSON 'asia' или 'europe' может существовать вместе с другим типом региона. Оба не могут сосуществовать.
==> Я пытался использовать 'oneOf', но он прошел проверку ajv. На самом деле это должно провалиться. Может кто-нибудь помочь. Спасибо
JSON-схема
{
"type": "object",
"properties": {
"stat_data": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {},
"anyOf": [{
"required": ["region"],
"properties": {
"region": {
"enum": ["america"]
},
"country": {
"type": "string"
},
"population": {
"type": "string"
}
}
},
{
"oneOf": [
{
"required": ["region"],
"properties": {
"region": {
"enum": ["asia"]
},
"country": {
"type": "string"
},
"details": {
"type": "object",
"properties": {
"language": {
"type": "string"
},
"tz": {
"type": "string"
}
}
}
}
}, {
"required": ["region"],
"properties": {
"region": {
"enum": ["europe"]
},
"country": {
"type": "string"
},
"language": {
"type": "string"
}
}
}
]
}
]
}
}
}
}
JSON Объект FAIL, поскольку объекты типа "asia" и "europe" не могут сосуществовать.
{
"stat_data": [{
"region": "america",
"country": "USA",
"states": "50"
}, {
"region": "asia",
"country": "Japan",
"details": {
"language": "Japanese",
"tz": "utc+9.00"
}
}, {
"region": "europe",
"country": "finland",
"language": "Finnish"
}
]
}
JSON Object to PASS, поскольку существует ТОЛЬКО объект типа "asia".
{
"stat_data": [{
"region": "america",
"country": "USA",
"states": "50"
}, {
"region": "asia",
"country": "Japan",
"details": {
"language": "Japanese",
"tz": "utc+9.00"
}
}
]
}
JSON Object to PASS как ТОЛЬКО объект типа "europe" существует.
{
"stat_data": [{
"region": "america",
"country": "USA",
"states": "50"
}, {
"region": "europe",
"country": "finland",
"language": "Finnish"
}
]
}