2017-07-27 39 views
0

鮑勃先生既可以是開心的,也可以是難過的,但不是兩者兼而有之。他可能沒有指定他的心情。因此,這兩個屬性,傷心和快樂是可選的。如何確保兩個布爾屬性的值不應該同時爲真?

什麼是拒絕只有以下JSON

{ 
    "name": "Bob", 
    "sad": true, 
    "happy": true 
} 

這裏一個JSON模式的失敗嘗試:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
    "happy": { 
     "type": "boolean", 
     "default": false 
    }, 
    "sad": { 
     "type": "boolean", 
     "default": false 
    } 
    }, 
    "not": { 
    "allOf": [ 
     { 
     "properties": { 
      "happy": { 
      "enum": [ 
       true 
      ] 
      } 
     } 
     }, 
     { 
     "properties": { 
      "sad": { 
      "enum": [ 
       true 
      ] 
      } 
     } 
     } 
    ] 
    } 
} 

以上模式失敗的情況下,房地產「傷心」是真實的財產「快樂「 不見了。

+0

在這種情況下,擁有可以快樂,悲傷或無效的「情緒」會更有意義嗎? – jonrsharpe

+0

嗨@jonrsharpe不,我們不能改變模型。它就像那樣.. :( 你可以把它當做*如何確保兩個屬性的價值永遠不會是真的同時?* – Nilesh

回答

1

你非常接近。我所做的只是簡化你所擁有的東西,並添加required

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
    "happy": { 
     "type": "boolean", 
     "default": false 
    }, 
    "sad": { 
     "type": "boolean", 
     "default": false 
    } 
    }, 
    "not": { 
    "properties": { 
     "happy": { "enum": [true] }, 
     "sad": { "enum": [true] } 
    }, 
    "required": ["happy", "sad"] 
    } 
} 
相關問題