我正在尝试验证“actions”数组是否具有特定对象。每个对象都可以拥有自己的属性,具体取决于type属性。 actions数组可以从这些类型的对象中出现多个,而不仅仅是一个。
我的JSON:
{
"actions": [
{
"type": "X",
"a": 1,
"b": 2,
"c": 3
},
{
"type": "Y",
"d": 1,
"e": 2,
"f": 3
}
]
}
在此示例中,type = X的对象具有a,b,c所需的属性。数组中的对象类型Y具有必需的属性d,e,f。
我正在尝试使用switch关键字验证这一点:
{
"type": "object",
"required": [
"actions"
],
"properties": {
"actions": {
"type": "array",
"items": {
"switch": [
{
"if": {
"properties": {
"type": {
"pattern": "^X$"
}
}
},
"then": {
"required": [
"a",
"b",
"c"
]
}
},
{
"if": {
"properties": {
"type": {
"pattern": "^Y$"
}
}
},
"then": {
"required": [
"d",
"e",
"f"
]
}
}
]
}
},
}
}
但我仍然无法弄清楚如何使用switch关键字来验证数组的对象,其中每个对象类型由对象中的属性指定,因此可以使用属性来标识对象类型。
答案 0 :(得分:1)
您的架构看起来几乎没问题,您可能需要最后一个{then: false}
子模式"切换",如果没有它,如果"键入"财产既不是' X'也不是' Y'验证将成功。
此外,您可以使用{pattern: '^X$'}
甚至{enum: ['X']}
而不是使用{constant: 'X'}
(在草案06中,它是" const");而不是使用开关,你可以使用" if / then / else" (来自ajv-keywords,它可能会被包含在草案-07)中,甚至可以包含在#34; select"中,这可能更适合这种情况。
也许你可以澄清最后一个问题,我不认为我理解。