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 ...
}
}
}
}
}
在伪代码中:如果帐户类型为“特殊”,则将额外定义应用于所有客户项目。
更多信息在这里:
我需要根据来自父对象的 属性 对数组应用验证。例如:
{
"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 ...
}
}
}
}
}
在伪代码中:如果帐户类型为“特殊”,则将额外定义应用于所有客户项目。
更多信息在这里: