所需属性的Json模式取决于另一个属性

时间:2016-10-27 20:31:51

标签: json validation jsonschema

我可能会发送一些请求类型。 这是一个请求类型的属性,可能包含值"添加","更新","删除" (例如)。

根据请求类型,我将获得不同的属性

如果请求类型为"添加",那么我将获得额外的属性" 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

我必须再做一些实验,最后可能会删除它!

1 个答案:

答案 0 :(得分:1)

回答我自己的问题 - 这个问题的方法很好。使用像http://www.jsonschemavalidator.net/这样的验证器,我得到了我期望的行为。

只是Visual Studio Code的intellisense无法解释它,这意味着它可以提供有用的指导(公平地说,它是一个难题,因为它意味着部分匹配" oneOf"中的所有备选方案,以查看哪些备选方案可能仍然有效)