Создание зависимости схемы Json на основе отрицания значений из ключа - PullRequest
0 голосов
/ 10 декабря 2018
{
      "eventType": "memory_exceeded",
      "event_time": 1544423819843,
      "clientDetails": {},
      "appDetails": {},
      "DeviceDetails": {}
    }

Я пытаюсь прийти со схемой json со следующим условием в приведенной выше структуре json.

1) Существует ключ "eventType", который может иметь значения 1000+.

2) Есть 4 других зависимых свойства вместе с типом события.

3) Я хочу написать определение схемы, где

a) Если "eventType"! =["x", "y", "z"], затем включите все 4 зависимых свойства.

b) Если "eventType" = ["x", "y", "z"],затем включите только «DeviceDetails» в качестве зависимости.

Могу ли я использовать OneOf для этого?Я знаю, что мы можем использовать ключ "not" для проверки отрицания в 3a.Но я не могу присоединиться к точкам.Пожалуйста, помогите с указателями.

1 Ответ

0 голосов
/ 10 декабря 2018

Если под "затем включить все 4 зависимых свойства" вы имеете в виду придание им требуемых свойств, тогда я могу подумать об этом решении на основе черновика-07:

Если eventTypeимеет значение «x», «y» или «z», тогда только DeviceDetails является обязательным.В остальном все остальное есть.(Я позволю вам заменить эти значения заполнителей самостоятельно:)

Я позволил себе установить minProperties: 1 в DeviceDetails, appDetails и ClientDetails, так как предполагал, что вы предпочитаете неПустые объекты для них.Если в этом нет необходимости, вы можете безопасно удалить это из схемы.

{
  "properties": {
    "eventType": {
      "type": "string"
    },
    "event_time": {
      "type": "integer"
    },
    "ClientDetails": {
      "type": "object",
      "minProperties": 1
    },
    "appDetails": {
      "type": "object",
      "minProperties": 1
    },
    "DeviceDetails": {
      "type": "object",
      "minProperties": 1
    }
  },
  "if": {
    "properties": {
      "eventType": {
        "enum": [
          "x",
          "y",
          "z"
        ]
      }
    }
  },
  "then": {
    "required": [
      "DeviceDetails"
    ]
  },
  "else": {
    "required": [
      "event_time",
      "ClientDetails",
      "appDetails",
      "DeviceDetails"
    ]
  }
}
...