Во-первых, вам нужно правильно установить тип схемы, в противном случае имплементации могут предполагать, что вы используете последнюю версию схемы JSON (в настоящее время черновик-7).
Итак, в корне схемы вам понадобитсяследующее:
"$schema": "http://json-schema.org/draft-06/schema#",
Во-вторых, items
применимо, только если целью является массив.В настоящее время ваша схема проверяет только следующее:
Если корневой объект имеет свойство «Скорость», он должен иметь ключ «скорость».Корневой объект не должен иметь никаких других свойств.
И ничего больше.
Вы используете definitions
и то, как вы ссылаетесь на них, вероятно, не то, что вы намеревались.
Похоже, вы хотите, чтобы Speed
содержал speed
, который должен быть целым числом, и, необязательно, SituationType
, который должен быть строкой, ограниченной перечислением, и ничем иным.
Вот схемаЯ основывался на том, что правильно и успешно проходит, основываясь на данных вашего примера:
{
"$schema": "http://json-schema.org/draft-06/schema#",
"type": "object",
"oneOf": [
{
"properties": {
"Speed": {
"properties":{
"speed": {
"$ref": "#/definitions/speed"
},
"SituationType": {
"$ref": "#/definitions/SituationType"
}
},
"required": [
"speed"
],
"additionalProperties": false
}
},
"additionalProperties": false
}
],
"definitions": {
"speed": {
"description": "Speed",
"type": "integer"
},
"SituationType": {
"type": "string",
"description": "Situation Type",
"enum": [
"Advice",
"Depend"
]
}
}
}
Вам необходимо определить свойства для Speed
, потому что в противном случае вы не можете предотвратить дополнительные свойства, такие как *На 1027 * воздействует только смежная клавиша properties
.Мы ищем новое ключевое слово в draft-8 для поддержки такого поведения, но оно не похоже на то, что оно вам нужно в вашем примере ( Огромная проблема Github в отношении ).
Добавление additionalProperties
false к схеме Speed
теперь запрещает другие ключи в этом объекте.
Я ожидаю, что с учетом вашего названия вопроса, здесь может быть больше схемы, и вы упростили еена этот вопрос.Если у вас есть более подробная схема с более сложными проблемами, я с радостью вам помогу.