首页 文章

当需要的属性取决于另一个属性的值时,Json模式

提问于
浏览
1

我有很多可能会发送的请求类型 . 有一个请求类型属性,可能具有值“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 回答

  • 1

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

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

相关问题