Фон: Привет! Я пытался работать над схемой, которая проверяет, что массив внутри объекта содержит только некоторые из объектов, которые были определены внутри моего definitions
блока.
В качестве примера , У меня есть следующие JSON данные для проверки:
{
"component_type":"section",
"component_properties":{
"section_name":"first_section",
"fields":[
{
"component_type":"spacer",
"component_properties":{
"width":6
}
},
{
"component_type":"textbox",
"component_properties":{
"display_text":"hello!",
"text_color":"black"
}
},
{
"component_type":"spacer",
"component_properties":{
"width":3
}
}
]
}
}
Идея этих данных заключается в том, что существует section
«компонент», определенный на самом высоком уровне, заполненный подкомпонентами, которые также определены для проверки (spacer
, textbox
).
Моя основная проблема: Я не могу понять, как проверять массивы, состоящие исключительно из нескольких определенные объекты. Моя текущая схема выглядит следующим образом:
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"properties": {
"component_type": {
"type": "string",
"const": "section"
},
"component_properties": {
"type": "object",
"properties": {
"section_name": { "type": "string"},
"sections": {
"type": "array",
"oneOf": [
{ "$ref": "#/definitions/section_field" },
{
"type": "array",
"items": {
"$ref": "#/definitions/section_field"
}
}
]
}
}
}
},
"definitions": {
"spacer": {
"type": "object",
"properties": {
"component_type": {
"type": "string",
"const": "spacer"
},
"component_properties": {
"width": "number"
}
}
},
"textbox": {
"type": "object",
"properties": {
"component_type": {
"type": "string",
"const": "textbox"
},
"component_properties": {
"display_text": "hello!",
"text_color": "purple"
}
}
},
"section_field": {
"oneOf": [
{
"$ref": "#/definitions/spacer"
},
{
"$ref": "#/definitions/textbox"
}
]
}
}
}
Эта схема не гарантирует, что все элементы внутри массива «fields» свойства component_properties на уровне раздела имеют поле "component_type": "spacer"
или "component_type": "textbox"
. Например, "component_type": "another_one"
не должно пройти проверку.
Пожалуйста, дайте мне знать, если какая-либо дополнительная информация будет полезна! Я был бы очень признателен за некоторые рекомендации здесь.