2015-12-05 23 views
0

我有非常基本的模式,表現出奇怪的行爲。不同類型數組的JSON模式

{ 
"$schema": "http://json-schema.org/draft-04/schema#", 
"type": "object", 
"properties": 
{ 
    "$out": 
    { 
     "type": "array", 
     "minItems": 1, 
     "items": { 
      "oneOf": [ 
       { "type": "string" }, 
       { "$ref": "#/definitions/alias" } 
      ] 
     } 
    } 
}, 
"definitions": 
{ 
    "alias": 
    { 
     "properties": 
     { 
      "$source": { "type": "string" }, 
      "$alias": { "type": "string" } 
     }, 
     "required": [ "$source", "$alias" ], 
     "additionalProperties": false 
    } 
} 

}

如果我用下面的JSON進行測試:

{ 
    "$out": [ 
     "12w", 
     { "$source": "WH.Code", "$alias": "WarehouseCode"} 
    ] 
} 

它失敗(sample)說在數組字符串元素是有效的agains更是一個模式。如果我改變引用'別名'與只是{「type」:「字符串」}它按預期工作。我究竟做錯了什麼?

在此先感謝。

回答

1

僅當該值爲對象時,您所用的所有關鍵字(properties,required,additionalProperties)才適用。因爲沒有什麼要求值是一個對象,任何不是對象的東西都會通過。對象關鍵字只在它是對象時才被考慮。

有很多方法可以使架構有效,但最直接的方法是將"type": "object"添加到alias架構中。