json 模式中基于枚举值的两种绑定依赖关系

Two way binding dependences based on enum value in json schema

我有一个大四学生,我必须验证以下 json 数据的架构。

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

关于JSON的信息: userId是一个整数,userType是枚举['Customer','Admin','Guest']
所以问题是我想根据 JSON 模式验证 JSON 数据:

  1. 如果存在 userId,则需要 userType
  2. 如果 userType ['Customer','Admin'] 存在但 userId 不存在,那么它不应验证 JSON 数据。
  3. 但是如果 userType['Guest'] 那么他们的 userId 是必需的。

这里我达到了第 1 点,但无法达到第 2 点和第 3 点:

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

任何人都可以建议我 json 架构解决方案吗?

我认为您可以使用 json 模式的 属性 anyOf 来解决它,您可以添加多个模式来验证 userType 是否为 CustomerAdmin 强制使用一种模式,如果用户类型是 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"
        }
      }
    }
  ]
}