我可能会收到多种类型的请求。 有一个请求类型属性,其值可能为“添加”、“更新”、“删除”(例如)。
根据请求类型,我会得到不同的属性
如果请求类型是“add”,那么我将获得额外的属性“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 Code 验证器认为它是一个有效的模式),但没有执行我想要的操作 - 似乎当我编写相应的 JSON 时,它总是与第一个匹配,并且只接受“添加“作为其值)。
那么我该怎么做呢?我可以在这里定义 JSON 格式,所以我可以要求使用我可以以某种方式验证的东西。
这几乎与此重复:基于属性之一的 JSON 模式 anyOf 验证,但我认为答案需要为每种请求类型提供不同的附加属性集。
编辑:根据validation of json schemahaving oneOf keywords的答案 看来我的方法应该有效,所以也许这只是 MS VS Code 中智能感知的限制?
EDIT2:这提供了另一种方法:编写依赖于其他键的更复杂的 json 模式
我必须进行更多实验,也许最终会删除它!
回答我自己的问题 - 问题的方法效果很好。 使用像 http://www.jsonschemavalidator.net/ 这样的验证器,我得到了我期望的行为。
只是 Visual Studio Code 的智能感知无法以某种方式解释它,这意味着它可以提供有用的指导(公平地说,这是一个困难的问题,因为它意味着部分匹配“oneOf”中的所有替代方案以查看哪些可能仍然有效)
我有一个微妙的问题,其中一个属性名称依赖于另一个属性的值。该值不能放入枚举中,因为值集是无限的,唯一的限制(验证)是该值属于另一个属性。其他属性将定义诸如正则表达式、长度等验证。
这是我想要实现的有效 JSON:
{ "instrument_type":"汽车贷款", “汽车贷款”:{} }
我想要的验证是确保主体必须包含一个名称= $.instrument_type 处元素的值的对象
换句话说,验证规则应该是:
有什么方法可以在 JSON Schema 中实现这一点吗?