Я пытаюсь вести себя как полиморфное c поведение в JSON. У меня есть следующий пример JSON, который я хочу проверить по схеме JSON ниже:
simpified_example. json
{
"header": null,
"body": null,
"footer": {
"kpis": {
"metrics_name": "metrics_type_2",
"metrics_value": 3.141592
}
}
}
simpified_schema.schema. json
{
"definitions": {
"metrics_name_output_type": {
"type": "string",
"enum": [
"metrics_type_1",
"metrics_type_2",
"metrics_type_3"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"title": "The Root Schema",
"required": [
"header",
"body",
"footer"
],
"properties": {
"header": {
"$id": "#/properties/header",
"type": "null"
},
"body": {
"$id": "#/properties/body",
"type": "null"
},
"footer": {
"$id": "#/properties/footer",
"type": "object",
"title": "The Footer Schema",
"kpis": {
"title": "The Kpis Schema",
"$id": "#/properties/footer/properties/kpis",
"discriminator": {
"tag": "metrics_name",
"mapping": {
"metrics_type_1": {
"properties": {
"metrics_value": { "type": "string" }
}
},
"metrics_type_2": {
"properties": {
"metrics_value": { "type": "number" }
}
},
"metrics_type_3": {
"properties": {
"metrics_value": { "type": "integer" }
}
}
}
}
}
}
}
}
Проблема в том, что я не понимаю, как применить «дискриминатор», который я написал. Мой пример JSON в сравнении с моей примерной схемой кажется всегда VALID согласно группе валидаторов. Например:
https://jsonschemalint.com/#! / Version / draft-07 / markup / json
Что я должен отредактировать / добавить в дополнение к ограничению "string" в случае "metrics_type_3" например, выбор (правильный будет "integer" )?