我如何通知 Json 模式它的数组中必须至少有一种类型的对象,但其他类型是可选的
How do I inform a Json schema that it must have atleast one type of object in its Array, but other types are optional
我正在为工作更新 JSON 架构。
对于json数组,我们有
"accountsInfo": [{
"type":"ADMIN",
"firstName":"Bill",
"lastName":"Cipher",
"emailAddress":"bcipher@gfalls.com"
}, {
"type":"USER"
"firstName":"Bugs",
"lastName":"Bunny",
"emailAddress":"whats@updoc.org"
}]
对于此架构,USER 类型必须是可选的,数组中至少需要 1 个 ADMIN 类型。我该怎么做?
这是架构文件的一部分。它正在使用 Json 架构 7.
"accountsInfo": {
"type": "array",
"uniqueItems": true,
"minItems": 2,
"items": [
{
"type": "object",
"required": [
"type",
"firstName",
"lastName",
"emailAddress"
],
"properties": {
"type": {
"type": "string",
"enum": [
"ADMIN",
"USER"
]
},
"firstName": {
"type": "string",
"$ref": "#/definitions/non-empty-string"
},
"lastName": {
"type": "string",
"$ref": "#/definitions/non-empty-string"
},
"emailAddress": {
"type": "string",
"format": "email"
}
}
}
]
}
您可以为此使用“包含”关键字。在伪代码中:“该数组必须包含(至少一个)根据此模式成功评估的项目”。
作为 "type": "object"
和 "items": { ... }
的同级关键字,添加:
"contains": {
"properties": {
"type": {
"const": "ADMIN"
}
}
}
此外,您的 "items"
关键字中有一个错误:如果您打算让该子模式匹配 所有 项,而不仅仅是第一个,请删除额外的数组围绕模式。 “items”的数组形式依次将数据中的每个项目与架构中的每个项目进行匹配,并且您只需为第一个项目指定一个架构,因此第一个之后的所有项目都可以是任何东西。
"items": { .. schema .. }
不是 "items": [ { .. schema .. } ]
。
如果按照建议使用 contains 关键字,并且使用严格模式,则可能需要添加 "type": "array" ,如下所示:
{
"type": "array",
"contains": {
"properties": {
"type": {
"const": "ADMIN"
}
}
}
}
我正在为工作更新 JSON 架构。
对于json数组,我们有
"accountsInfo": [{
"type":"ADMIN",
"firstName":"Bill",
"lastName":"Cipher",
"emailAddress":"bcipher@gfalls.com"
}, {
"type":"USER"
"firstName":"Bugs",
"lastName":"Bunny",
"emailAddress":"whats@updoc.org"
}]
对于此架构,USER 类型必须是可选的,数组中至少需要 1 个 ADMIN 类型。我该怎么做?
这是架构文件的一部分。它正在使用 Json 架构 7.
"accountsInfo": {
"type": "array",
"uniqueItems": true,
"minItems": 2,
"items": [
{
"type": "object",
"required": [
"type",
"firstName",
"lastName",
"emailAddress"
],
"properties": {
"type": {
"type": "string",
"enum": [
"ADMIN",
"USER"
]
},
"firstName": {
"type": "string",
"$ref": "#/definitions/non-empty-string"
},
"lastName": {
"type": "string",
"$ref": "#/definitions/non-empty-string"
},
"emailAddress": {
"type": "string",
"format": "email"
}
}
}
]
}
您可以为此使用“包含”关键字。在伪代码中:“该数组必须包含(至少一个)根据此模式成功评估的项目”。
作为 "type": "object"
和 "items": { ... }
的同级关键字,添加:
"contains": {
"properties": {
"type": {
"const": "ADMIN"
}
}
}
此外,您的 "items"
关键字中有一个错误:如果您打算让该子模式匹配 所有 项,而不仅仅是第一个,请删除额外的数组围绕模式。 “items”的数组形式依次将数据中的每个项目与架构中的每个项目进行匹配,并且您只需为第一个项目指定一个架构,因此第一个之后的所有项目都可以是任何东西。
"items": { .. schema .. }
不是 "items": [ { .. schema .. } ]
。
如果按照建议使用 contains 关键字,并且使用严格模式,则可能需要添加 "type": "array" ,如下所示:
{
"type": "array",
"contains": {
"properties": {
"type": {
"const": "ADMIN"
}
}
}
}