2017-03-02 31 views
0

讓我試着解釋我正在嘗試做什麼。我的JSON看起來像這樣退回嵌套對象的通用定義

My.json:

{ 
    "overrides": { 
     "key1": { 
      "DRM": { 
       "queue": "q1", 
       "resource": "r1m<0.5" 
      } 
     }, 
     "key2": { 
      "DRM": { 
       "queue": "q2", 
       "resource": "r1m<0.4" 
      } 
     } 
    } 
} 

我的架構:

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "id": "test-schema.json", 
    "definitions": { 
     "DRM": { 
      "type": "object", 
      "properties": { 
       "queue": { 
        "type": "string" 
       }, 
       "resource": { 
        "type": "string" 
       } 
      }, 
      "additionalProperties": false 
     }, 
     "key-objs": { 
      "type": "object", 
      "properties": { 
       "DRM": { 
        "$ref": "#/definitions/DRM" 
       } 
      }, 
      "additionalProperties": false 
     } 
    }, 
    "type": "object", 
    "properties": { 
     "overrides": { 
      "type": "object", 
      "properties": { 
       "key1": { 
        "$ref": "#/definitions/key-objs" 
       }, 
       "key2": { 
        "$ref": "#/definitions/key-objs" 
       } 
      } 
     } 
    } 
} 

我的問題是,每次我定義了一個新的keyoverrides(如: key3,key4),我需要更新我的模式,使其參考key-objs

我知道,overrides對象可以變成一個列表,列表中的所有項目可以定義key-objs。但我不想將overrides更改爲列表。

有沒有辦法讓我說overrides裏面的所有對象都應該引用key-objs而不是專門指定它?

回答

1

可以使用"additionalProperties": {schemaComesHere}

因此,而不是由一個定義屬性指定一個未指定的鍵的模式,你可以做

"overrides": { 
     "type": "object", 
     "additionalProperties": { 
      "$ref": "#/definitions/key-objs" 
     } 
    }