Двухсторонние зависимости, основанные на значении перечисления в схеме json - PullRequest
2 голосов
/ 29 января 2020

У меня есть старший, где мне нужно проверить схему для данных json ниже.

{ 'userId': 123, 'userType': CUSTOMER }

Информация о JSON: Были userId - это целое число, а userType - это enum ['Customer','Admin','Guest']
Так что проблема Я хочу проверить данные JSON из схемы JSON на основе:

  1. Если присутствует userId, то требуется userType.
  2. Если присутствует userType ['Customer','Admin'], но userId нет, то он не должен проверять данные JSON.
  3. Но если userType равен ['Guest'], то требуется их идентификатор пользователя.

Здесь я достиг пункта 1, но не могу достичь пунктов 2 и 3:

{
'type': 'object',
  'properties': {
     'user': {
         'type': 'integer',
         'minimum': 0
      },
     'userType': {
         'type': 'string',
         'enum': ['Customer','Admin','Guest'],
      }
   },
   'dependencies': {
       'userId': ['userType']
     }
}

Может кто-нибудь предложить мне json решение схемы для этого?

1 Ответ

2 голосов
/ 29 января 2020

Я думаю, что вы можете решить эту проблему с помощью свойства anyOf из json Схема, вы можете добавить несколько схем для проверки, если userType равно Customer или Admin принудительно использовать одну схему и если тип пользователя - Guest, введите другой, например:

{
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "user": {
          "type": "integer",
          "minimum": 0
        },
        "userType": {
          "type": "string",
          "enum": [
            "Customer",
            "Admin"
          ]
        }
      }
    },
    {
      "type": "object",
      "properties": {
        "user": {
          "type": "integer",
          "minimum": 0
        },
        "userType": {
          "type": "string",
          "enum": [
            "Guest"
          ]
        },
        "userId": {
          "type": "string"
        }
      }
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...