[英]JSON Schema oneOf validation
我正在嘗試創建一個JSON模式,該屬性將允許屬性為數字或特定格式的對象。
我的數據如下所示:
{
"num": 200
}
我的架構如下所示:
{
"properties": {
"num": {
"type": [
"number",
"object"
],
"oneOf": [
{
"type": "number"
},
{
"$ref": "#/definitions/Variable"
}
]
}
},
"required": [
"num"
],
"additionalProperties": false,
"definitions": {
"Variable": {
"title": "Variable",
"properties": {
"$variable$": {
"type": "boolean",
"example": true
},
"name": {
"type": "string"
},
"defaultValue": {
"type": [
"string",
"object",
"number"
]
}
},
"required": [
"$variable$",
"name"
],
"additionalProperties": false
}
}
}
當我在此處通過驗證器運行它時: https : //www.jsonschemavalidator.net/
我收到此錯誤:
Message: JSON is valid against more than one schema from 'oneOf'. Valid schema indexes: 0, 1.
Schema path: #/properties/num/oneOf
我假設我缺少有關oneOf
工作原理的明顯信息,但是我無法弄清楚它可能是什么。 希望在這里提供任何幫助,謝謝!
您得到的錯誤是告訴您兩個oneOf
模式都已驗證為true。 值4
對以下模式有效可能令人驚訝。
{
"properties": {
"foo": { "type": "string": }
},
"required": ["foo"]
}
事實證明,當值不是對象時, properties
關鍵字和required
關鍵字將不適用。 因此,當根據數字(或不是對象的任何東西)進行驗證時,上述模式實際上是空模式( {}
)。 因為空模式意味着沒有約束,所以一切都是有效的。
要解決您的問題,只需在/definitions/Variable
模式中添加"type": "object"
。
對於您的情況,您根本不需要oneOf,只需使用“ type”:[“ number”,{“ $ ref”:“#/ definitions / Variable”}]]代替“ type”:[“ number” ,“賓語”]
{
"properties": {
"num": {
"type": [
"number",{"$ref":"#/definitions/Variable"}
]
}
},
"required": [
"num"
],
"additionalProperties": false,
"definitions": {
"Variable": {
"title": "Variable",
"properties": {
"$variable$": {
"type": "boolean",
"example": true
},
"name": {
"type": "string"
},
"defaultValue": {
"type": [
"string",
"object",
"number"
]
}
},
"required": [
"$variable$",
"name"
],
"additionalProperties": false
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.