2014-02-19 49 views
0

我additionalProperties現場驗證JSONs看起來像:不同類型在JSONSchema

{ 
    "propertyName1" : "value", 
    "propertyName2" : ["value1", "value2"], 
    "propertyName3" : { "operator1" : "value" }, 
    "propertyName4" : { "operator2" : ["value1", "value2"] }, 
    ... 
} 

所以propertyName是任意鍵,和運營商的定義。

我想我應該用一個模式,如:

{ 
    "id" : "urn:my_arbitrary_json#", 
    "type" : "object", 
    "required" : false, 
    "additionalProperties" : { 
     "id" : "urn:my_arbitrary_key#", 
     "type" : "object", 
     "required" : true, 
     "properties" : { 
      "operator1" : { ... }, 
      "operator2" : { ... } 
     } 
    } 
} 

然而,這種模式缺乏定義propertyName1propertyName2案件。我想定義一個數組來驗證不同類型的additionalProperties,但根據規範這是不正確的。有什麼辦法來驗證這樣的JSON?

回答

1

如果給定的一條數據可以有多種不同的形狀,那麼您可以使用oneOfanyOf。例如在這裏,你可以有:

{ 
    "type" : "object", 
    "additionalProperties" : { 
     "oneOf": [ 
      {... string ...}, 
      {... array of strings ...}, 
      ... 
     ] 
    } 
} 

事實上,因爲此處的選項都是不同的類型,你可以簡單地有多個項目在type代替:

{ 
    "type" : "object", 
    "additionalProperties" : { 
     "type": ["string", "array", "object"], 
     "items": {"type": "string", ...}, // constraints if it's an array 
     "properties": {...} // properties if it's an object 
    } 
}