2017-08-14 68 views
2

的模式數量限制有沒有一種方法,創建一個JSON模式,限制可能會出現一個對象是多少? 或者確定一個對象是唯一的?的Json同一對象

最後,我想是這樣

{ 
    "days": { 
    "monday": { 
    "schedule": { 
    "start_time": "23:35" 
    } 
    }, 
    "tuesday": { 
    "schedule": { 
    "start_time": "23:23" 
    } 
    } 
    } 
} 

在此JSON,每天應只出現一次。就像每天一次開始時間一樣。

到目前爲止,我下面的模式,但沒有成功都嘗試過。 有了這個模式,我可以在我的json中有多個「星期一」對象,並且模式仍然有效。但是我正在尋找的是一個不適用於多個對象的模式。

{ 
    "$schema": "http://json-schema.org/schema#", 
    "title": "DayScheduler", 
    "type": "object", 
    "required": [ 
    "days" 
    ], 
    "properties": { 
    "days": { 
     "monday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "tuesday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "wednesday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "thursday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "friday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "saturday": { 
     "$ref": "#/definitions/scheduler" 
     }, 
     "sunday": { 
     "$ref": "#/definitions/scheduler" 
     } 
    } 
    }, 
    "definitions": { 
    "scheduler": { 
     "type": "object", 
     "required": [ 
     "schedule" 
     ], 
     "properties": { 
     "schedule": { 
      "type": "object", 
      "required": [ 
      "start_time" 
      ], 
      "properties": { 
      "start_time": { 
       "type": "string", 
       "pattern": "^([01]?[0-9]|2[0-3]):[0-5][0-9]" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

有沒有辦法用json-schema實現這一點?

+0

*沒有成功可言* - 你的意思是這不是成功的?驗證的行爲不像預期的那樣?你得到一個錯誤?什麼? –

+0

更新了我的問題。 有了這個模式,我可以在我的json中有多個「星期一」對象,並且模式仍然有效。但是我正在尋找的是一個不適用於多個對象的模式。 – pan

回答

0

我的JSON的經驗使得我明白,如果你有相同的密鑰多個對象,最後一個值將採取的關鍵。 你可以嘗試添加

{ 
    "name": name, 
    type: object, 
    properties: { 
     a:b, 
     c:d 
    }, 
    "additionalProperties": false 
} 

到您的架構,但我仍然認爲每個鍵的最後一次出現將被視爲值。

+0

我沒有看到,我應該把「additionalProperties」:false設置爲限制數量。你會把它放在哪裏? – pan

+0

@我編輯我的答案,通過一個例子來解釋它。我不太確定它會阻止多次出現的允許類型。 –

1

重複鍵沒有在JSON不允許的。 JSON模式旨在驗證JSON數據。它無法驗證無效的JSON數據。

這個例子有助於說明爲什麼這是無效的。

var value = { 
    "foo": 1, 
    "foo": 2 
} 

如果評估這是一個JavaScript對象,並嘗試訪問該對象的屬性foovalue.foo === ???,是12?它含糊不清。