Раньше я писал одну схему JSON, но теперь, когда я пытаюсь сделать ее немного более продвинутой, я застрял.
(я открыт для советов по «хорошей практике» в комментариях)
(Является ли $id
необязательным? Я должен удалить его для простоты в примере кода?)
Цель:
Я пытаюсь создать схему с определением объекта (example_obj
), которое используется рекурсивно. Этот объект может иметь только 1 аргумент (or
или and
или value
). Но в корне json я хочу добавить 1 дополнительное свойство.
json-schema
{
"definitions": {
"example_obj": {
"$id": "#/definitions/example_obj",
"type": "object",
"maxProperties": 1,
"properties": {
"or": {
"$id": "#/definitions/example_obj/properties/or",
"type": "array",
"items": {
"$id": "#/definitions/example_obj/properties/or/items",
"$ref": "#/definitions/example_obj"
}
},
"and": {
"$id": "#/definitions/example_obj/properties/and",
"type": "array",
"items": {
"$id": "#/definitions/example_obj/properties/and/items",
"$ref": "#/definitions/example_obj"
}
},
"value": {
"$id": "#/definitions/example_obj/properties/value",
"type": "string"
}
}
}
},
"type": "object",
"title": "The Root Schema",
"required": ["filter_version"],
"allOf": [
{
"$ref": "#/definitions/example_obj"
},
{
"properties": {
"filter_version": {
"$id": "#/properties/filter_version",
"type": "string",
"pattern": "^([0-9]+\\.[0-9]+)$"
}
}
}
]
}
json, которое я хочу пройти:
{
"filter_version": "1.0",
"or": [
{
"and": [
{
"value": "subject"
}
]
},
{
"or": [
{
"value": "another subject"
}
]
}
]
}
Проблема:
Когда я пытаюсь расширить example_obj
для определения корня, оно кажется неудачным, потому что объект example_obj
не допускает более 1 свойства по дизайну.
Другими словамиПохоже, что каждая проверка номера аргумента, который я добавляю к example_obj
, также выполняется для дополнительного свойства (т. е. filter_version
).
Кто-нибудь знает, где разместить эту проверку для «точно 1аргумент ', чтобы он не оценивался на объекте root
?
Попытки:
Я пытался работать с различными способами определения требований example_obj
, но безуспешно. Как и при замене "maxProperties": 1
на:
"oneOf": [
{
"required": [
"or"
]
},
{
"required": [
"and"
]
},
{
"required": [
"where"
]
},
{
"required": [
"where not"
]
}
],
Заранее благодарен за любую помощь !!
Проверка моей схемы с помощью онлайн-валидатора схемы .
(В конце мне нужно проверить его на Python, на случай, если это имеет значение)