jsonschema: проверка того, что массив содержит элемент, без ошибок в других элементах

Недавно я нашел jsonschema, и мне очень понравилось ее использовать, однако недавно я наткнулся на то, что хочу сделать, но просто не смог понять.

Что я хочу сделать, так это проверить, что массив должен содержать элемент, соответствующий схеме, но я не хочу, чтобы проверка не прошла для других элементов, которые будут в списке.

Скажем, у меня есть массив, подобный следующему:

arr = [
          {"some object": True},
          False,
          {"AnotherObj": "a string this time"},
          "test"
       ]

Я хочу иметь возможность сделать что-то вроде «проверить, что arr содержит объект, у которого есть свойство« некоторый объект », которое является логическим, и ошибка, если это не так, но не заботиться о других элементах».

Я не хочу, чтобы он проверял другие элементы в списке. Я просто хочу убедиться, что список содержит элемент, который соответствует схеме хотя бы один раз. Я также не знаю, в каком порядке элементы будут поступать в массив.

Я уже пробовал это со схемой вроде:

   {"type": "array",
    "items": {
        "type": "object",
        "properties": {
            "tool": {
                # A schema here to validate tool
            },
        "required": ["tool"]
        }
    }

Проблема в том, что для этого требуется, чтобы каждый элемент в массиве имел свойство «инструмент», а не то, что я действительно хочу.

Любая помощь, которую кто-либо может дать мне в этом, будет высоко оценена! Я был в тупике на этом в течение очень долгого времени без какого-либо продвижения вперед.

Спасибо!


person Bleck H.    schedule 08.07.2013    source источник


Ответы (1)


Я получил ответ на этот вопрос: используется схема (где... B... это требуемая схема):

{
    "type": "array",
    "not": {
        "items": {
            "not": {... B ...}
        }
    }
}

В основном получается что-то вроде «Убедитесь, что нет (элементы не соответствуют B)». Я не на 100% понимаю, почему это работает так, как работает, но я решил поделиться этим с потомками.

person Bleck H.    schedule 09.07.2013
comment
Лучше сформулировать это так: убедитесь, что нет (ВСЕ элементы не соответствуют B). - person cloudfeet; 18.07.2013