簡體   English   中英

JSON模式,一個驗證

[英]JSON schema, oneOf validation

我的登錄端點可以具有“社交”登錄名和“用戶”登錄名,因此正文可以如下所示:

user: {
  email: 'test@gmail.com',
  password: 'test'
}

或像這樣:

authentication: {
  provider: 'facebook',
  token: 'abcd'
}

我想創建一個驗證第一個正文或第二個正文的JSON模式。 我偶然發現了oneOf ,這就是我嘗試過的:

body: {
        oneOf: [{
          properties: {
            user: {
              type: 'object',
              required: [
                'email',
                'password'
              ],
              email: {
                type: 'string',
                format: 'email'
              },
              password: {
                type: 'string',
                minLength: 6,
                maxLength: 32
              }
            },
          }
        }, {
          properties: {
            authentication: {
              type: 'object',
              required: [
                'provider',
                'token'
              ],
              provider: {
                type: 'string',
                enum: ['facebook']
              },
              token: {
                type: 'string'
              }
            }
          }
        }]
      }

但是,這給了我以下錯誤:

    {
        "keyword": "oneOf",
        "dataPath": ".body",
        "schemaPath": "#/properties/body/oneOf",
        "params": {},
        "message": "should match exactly one schema in oneOf"
    }

如果有人可以幫助我為此做一個JSON模式設置,那將很棒。 謝謝

您可以使用oneOf進行此oneOf 雖然我會用不同的方式。

 {
   "$schema": "http://json-schema.org/schema#",
   "type": "object",
   "properties": {
     "login": {
       "oneOf": [
         {
           "required": [
             "user"
           ]
         },
         {
           "required": [
             "authentication"
           ]
         }
       ],
       "type": "object",
       "properties": {
         "user": {
           "type": "object",
           "properties": {
             "email": {
               "type": "string"
             },
             "password": {
               "type": "string"
             }
           }
         },
         "authentication": {
           "type": "object",
           "properties": {
             "email": {
               "type": "string"
             },
             "password": {
               "type": "string"
             }
           }
         }
       }
     }
   }
 }

有了這個,兩個json會根據模式進行驗證

 {
   "login": {
     "authentication": {
       "provider": "facebook",
       "token": "abcd"
     }
   }
 } 

 {
   "login": {
     "user": {
       "email": "test@gmail.com",
       "password": "test"
     }
   }
 }

但是,如果您嘗試將兩者合而為一,它將無法驗證

 {
   "login": {
     "authentication": {
       "provider": "facebook",
       "token": "abcd"
     },
     "user": {
       "email": "test@gmail.com",
       "password": "test
     }
   }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM