Проверить истинные значения для разных ключей в двух разных элементах массива в JSON Validation - PullRequest
1 голос
/ 28 мая 2020

Подумайте, есть ли у меня массив, который выглядит примерно так, как в примере ниже:

          {
            "id": 1,
            "published": true,
            "available": false
          },
          {
            "id": 2,
            "published": false,
            "available": true
          } 

В массиве может быть много элементов, скажем, до 10. Мне нужно проверить все элементы отдельно для published и available. Проверка JSON должна проверять все элементы и PASS , если какой-либо из элементов массива имеет true значение для published хотя бы один раз AND true значение для available хотя бы один раз. Это может быть один и тот же предмет или разные предметы. Проверка должна завершиться неудачей, если какое-либо из этих свойств не было true ни разу ни в одном из элементов массива. Есть идеи, как я могу это сделать? Я пробовал

anyOF : проверяет одно из свойств и проходит проверку,

allOf : проверяет каждый экземпляр и не проходит проверку для в каждом случае это ложь (необходимо передать, даже если это ключ true один раз),

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

1 Ответ

1 голос
/ 28 мая 2020

Конечно, вы можете использовать "contains" более одного раза - просто поместите его в "allOf" или "anyOf". Итак, что-то вроде этого?

{
  "type": "array",
  "items": {
    "type": "object"
  },
  "allOf": [
    {
      "contains": {
        "properties": {
          "published": { "const": true }
        }
    },
    {
      "contains": {
        "properties": {
          "available": { "const": true }
        }
      }
    }
  ]
}
...