Надеюсь, я мог бы найти некоторую помощь в этой проблеме проверки: у меня есть массив JSON, который может иметь несколько типов объектов (видео, изображение).Внутри этого массива объекты имеют значение поля rel
.Случай, над которым я работаю, состоит в том, что может быть только один объект с разрешенным "rel": "primaryMedia"
- или видео или изображением.
Здесь представлены представления объектов для случая с изображением и видео, оба из которых показывают "rel": "primaryMedia"
.
{
"media": [
{
"caption": "Caption goes here",
"id": "ncim87659842",
"rel": "primaryMedia",
"type": "image"
},
{
"description": "Shaima Swileh arrived in San Francisco after fighting for 17 months to get a waiver from the U.S. government to be allowed into the country to visit her son.",
"headline": "Yemeni mother arrives in U.S. to be with dying 2-year-old son",
"id": "mmvo1402810947621",
"rel": "primaryMedia",
"type": "video"
}
]
}
Вот урезанная версия схемы, которую я создал, чтобы проверить это с помощью oneOf
(при условии, что это подойдет для моего случая).Однако он не работает должным образом.
{
"$id": "http://example.com/schema/rockcms/article.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {},
"properties": {
"media": {
"items": {
"oneOf": [
{
"additionalProperties": false,
"properties": {
"caption": {
"type": "string"
},
"id": {
"type": "string"
},
"rel": {
"enum": [
"primaryMedia"
],
"type": "string"
},
"type": {
"enum": [
"image"
],
"type": "string"
}
},
"required": [
"caption",
"id",
"rel",
"type"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"description": {
"type": "string"
},
"headline": {
"type": "string"
},
"id": {
"type": "string"
},
"rel": {
"enum": [
"primaryMedia"
],
"type": "string"
},
"type": {
"enum": [
"video"
],
"type": "string"
}
},
"required": [
"description",
"headline",
"id",
"rel",
"type"
],
"type": "object"
}
]
},
"type": "array"
}
}
}
При использовании средства проверки схемы JSON на https://www.jsonschemavalidator.net, схема проверяет правильность представления данных, но не работает при попытке перехватаошибки.
В приведенном ниже случае для видео добавляется headline
, а отсутствует id
.Это должно произойти, потому что headline
не разрешено для видео, и id
требуется.
{
"media": [
{
"headline": "Yemeni mother arrives in U.S. to be with dying 2-year-old son",
"rel": "primaryMedia",
"type": "video"
}
]
}
Результаты, полученные от валидатора, однако, не совсем ожидаемы.Похоже, что в своем ответе он объединяет две объектные схемы.
В дополнение к этому, я отдельно обнаружил, что схема позволит заполнить ОБА объект видео и изображения в media
, что не ожидается.
Попыткавыяснить, что я сделал не так, но тупик.Буду очень признателен за некоторые отзывы, если кто-то может предложить.Заранее спасибо!
Ответ валидатора:
Сообщение: JSON действителен в отсутствие схем из 'oneOf'.Путь к схеме: # / properties / media / items / oneOf
Сообщение: свойство 'headline' не определено, и схема не допускает дополнительные свойства.Путь к схеме: # / properties / media / items / oneOf / 0 / AdditionalProperties
Сообщение: значение enum не определено.Путь к схеме: # / properties / media / items / oneOf / 0 / properties / type / enum
Сообщение: в объекте отсутствуют обязательные свойства: description, id.Путь к схеме: # / properties / media / items / oneOf / 1 / required
Сообщение: в объекте отсутствуют обязательные свойства: caption, id.Путь к схеме: # / properties / media / items / oneOf / 0 / обязательный