2017-02-07 66 views
0

我有一個API路由,在處理邏輯之前驗證json模式。JSON-Schema草案-04 - OneOf需要

此路線可以基於發送的JSON創建2種類型的「文章」。我使用OneOf來檢查模式是否與這兩種類型中的一種相對應。

{ 
    "type": "object", 
    "oneOf": [{ 
     "properties": { 
      "name": { 
       "type": "string", 
      }, 
      "description": { 
       "type": "string" 
      } 
     } 
    }, { 
     "properties": { 
      "author": { 
       "type": "string", 
      }, 
      "editor": { 
       "type": "string" 
      } 
     }, 
     "required":["author", "editor"] 
    }] 
} 

  • 所以第一個類型可以有一個名稱和描述,但該字段不是必需的。

  • 第二種類型需要有作者編輯

如果JSON模式只與作者場送出發生了什麼? (編輯爲空)

感謝您的回覆。

回答

1

通過oneOf關鍵字

驗證對oneOf的定義,給出的數據必須是針對 給定的子模式的只有一個有效。

在你的架構中定義的方式,只包含一個「作者」屬性將始終驗證因爲拳oneOf定義,對象可以翻譯爲:

一個對象,具有任何屬性集是有效的,但如果對象包含「名稱」和「描述」屬性,則它們必須都是字符串類型。

正如您所看到的,僅包含「author」屬性的對象在此定義中是完全有效的。

實際上,如果給定的對象包含「名稱」和/或「描述」屬性並且它們不是字符串,則任何給定的對象將僅針對第二個定義(作者,編輯者)進行驗證。

這是學習的JSON模式https://spacetelescope.github.io/understanding-json-schema/

一個很好的參考這是一個很好的JSON模式驗證http://www.jsonschemavalidator.net