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