#json #jsonschema
Вопрос:
У меня есть структура схемы json, которая выглядит следующим образом.
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"description": "My sample Json",
"type": "object",
"properties": {
"eventId": {
"description": "The event Indetifier",
"type": [ "number", "string" ]
},
"serviceType": {
"description": "The service type. It can be either ABC or EFG",
"enum": [ "ABC", "EFG" ]
},
"parameters": { "$ref": "/schemas/parameters" }
},
"required": [ "eventId", "serviceType" ],
"$defs": {
"parameters": {
"$id": "/schemas/parameters",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Other Parameters",
"type": "object",
"properties": {
"activityType": {
"description": "The activity type",
"type": [ "null", "string" ]
},
"activitySubType": {
"description": "The activity sub type",
"type": [ "null", "string" ]
}
}
}
}
}
Теперь у меня есть требование выполнить некоторую логику проверки.
- Если EventID == «100» и ServiceType == «ABC», то parameters.activityType не должен быть равен нулю и должен иметь минимальную длину 10.
- Если EventID == «200» и ServiceType == «EFG», то параметр.activitySubType не должен быть равен нулю и должен иметь минимальную длину 20.
Я пытаюсь выполнить проверку, используя условие «если, то иначе». Я не уверен, как добавить это в средство проверки схемы Json.
Кто-нибудь может помочь мне с синтаксисом? Возможно ли это сделать?
Комментарии:
1. Вы просмотрели документацию? json-schema.org/understanding-json-schema/reference/…
Ответ №1:
Это определенно возможно. Для первого требования:
{
...
"if": {
"required": [ "eventId", "serviceType" ],
"properties": {
"eventId": {
"const": "100"
},
"serviceType": {
"const": "ABC"
}
}
},
"then": {
"required": [ "parameters" ],
"properties": {
"parameters": {
"properties": {
"activityType": {
"type": "string",
"minLength": 10
}
}
}
},
...
}
«Обязательные» ключевые слова есть, потому что, если свойство вообще не существует, подсхема «если» будет подтверждена как истинная, чего вы не хотите-вам нужно сказать «если это свойство существует, и его значение …, то …».
Второе требование очень похоже на первое. Вы можете использовать несколько ключевых слов «если»/»еще» в схеме одновременно, обернув их в allOf: "allOf": [ { ..schema 1..}, { ..schema 2.. } ]
Комментарии:
1. Спасибо вам за ответ. Это работает. Есть ли способ указать пользовательское сообщение об ошибке, в котором объясняется, какие свойства отсутствуют. В настоящее время это не ясно из сообщения об ошибке?
2. Возможно; вам придется проверить документацию оценщика, которого вы используете.