JSON 架构 - 有条件地将定义应用于数组?

JSON Schema - Apply a definition to an array conditionally?

我需要根据来自父对象的 属性 对数组应用验证。例如:

{
    "data": [{
        "account": {
            "type": "special"
        },
        "customers": [{
            "email": "test@test.com",
            "phoneNumbers": [
                "913 449-6602"
            ]
        }]
    }]
}

如果帐户 === 'special',则电子邮件和电话号码需要存在于客户内部。 (电子邮件 != null,并且 phoneNumbers.length > 1. 无需进行正则表达式验证) 其他的,我不在乎。

我已经筛选了几十个以前的问题,但没有找到任何解决这个用例的方法。

我很好奇是否可以有条件地应用定义?例如:当 account.type 是“特殊”时应用一个定义,当它不是时应用另一个定义。我认为“If-then-contains”行不通,因为我需要将验证应用于所有客户,而不仅仅是一个客户。

提前致谢,如果需要更多说明,请告诉我。

有帮助的相关问题:

您可以对所有项目应用条件 - 只需将其包装在 items 关键字中:

{
  "if": {
    "required": ["account"],
    "properties": {
      "account": {
        "required": ["type"],
        "properties": {
          "type": { "const": "special" }
        }
      }
    }
  },
  "then": {
    "required": ["customers"],
    "properties": {
      "customers": {
        "type": "array",
        "items": {
           ... check email and phoneNumbers here ...
        }
      }
    }
  }
}

在伪代码中:如果帐户类型为“特殊”,则将额外定义应用于所有客户项目。

更多信息在这里: