我有很多可能会发送的请求类型 . 有一个请求类型属性,可能具有值“add”,“update”,“delete”(例如) .
根据请求类型,我将获得不同的属性
如果请求类型是“添加”,那么我将获得额外的属性“add-red”,“add-blue”,“foo”例如
如果请求类型是“update ,,那么”update-xxx“,”update-yyy“,”update-xxx“
如果“删除”那么“foo”,“bar”......
请注意,对于多个请求类型,可能会出现一些其他属性(请参阅上例中的“foo”)
所以我想根据“请求类型”的值进行不同的验证 .
我试着去
"oneOf": [
{
...
"properties": { "request-type" : { "enum": ["add"] }
"add-red": { ...}
}
},
{
...
"properties": { "request-type" : { "enum": ["update"] }
"update-xxx": { ...}
}
}
希望验证器在决定选择哪个“oneOf”时匹配第一个的值 .
这似乎是“有效的”(因为VS代码验证器认为它是一个有效的架构)但是没有做我想要的 - 当我写相应的JSON时它似乎总是匹配第一个,并且只接受“添加” “作为它的 Value ) .
那我该怎么做呢?我可以在这里定义JSON格式,所以我可以要求使用我能以某种方式验证的东西 .
它几乎与此重复:JSON schema anyOf validation based on one of properties除了我认为那里的答案需要为每种请求类型设置不同的附加属性集 .
编辑:根据validation of json schema having oneOf keyword的答案,看起来我的方法应该工作所以这可能只是MS VS Code中intellisense的限制?
EDIT2:这给出了另一种方法:writing more complex json schemas that have dependencies upon other keys
我将不得不进行更多实验,最后可能会删除它!
1 回答
回答我自己的问题 - 这个问题的方法很好 . 使用像http://www.jsonschemavalidator.net/这样的验证器,我得到了我期望的行为 .
只是Visual Studio Code的intellisense无法解释它意味着它可以提供有用的指导(并且公平地说,这是一个难题,因为它意味着部分匹配“oneOf”中的所有备选方案,看哪个可能仍然有效)