Json A 或 B 的架构

Json schema for either A or B

我想编写一个架构规范,允许 属性 A 或 B。例如,

{
  "foo" : "bar",
  "A" : "something"
}
{
  "foo" : "bar",
  "B" : "something else"
}

应该是合法的,但是

{
  "foo" : "bar",
  "A" : "something",
  "B" : "something else"
}

应该是非法的。 2020-12/schema

的正确方法是什么

oneOf 运算符可以做到这一点。您可以将 属性 定义保留在 oneOf 之外,这样您就不必重复自己:

"type": "object",
"oneOf": [
  { "required": [ "A" ] },
  { "required": [ "B" ] }
],
"properties": {
  "A": { ... },
  "B": { ... },
  "foo": { ... }
}