对对象数组的要求
Requirements on array of objects
我写了架构:
{
"type": "array",
"items": {
"type": "object",
"properties": {
"alarms": {
"type": "integer"
},
"events": {
"type": "integer"
},
"statistics": {
"type": "integer"
}
}
},
"oneOf": [
{
"required":["alarms"],
"required":["events"],
"required":["statistics"]
}
]
}
不幸的是,架构允许:
[{alarms: 1, events: 1}, {events:1}, {statistics:3}]
我的目标是正确验证:
[{alarms: 1, {events:3}, {statistics:7}]
我尝试过,但没有成功。
根据 JSON 架构的 documentation 和您的示例,您要做的是验证 "Items" 对象。此外,您在 "oneOf" 验证中存在错误。您应该将 3 个对象添加到 "oneOf" 数组中,而您只有一个对象具有 3 个相同的参数。
{
"type": "array",
"items": {
"type": "object",
"properties": {
"alarms": {
"type": "integer"
},
"events": {
"type": "integer"
},
"statistics": {
"type": "integer"
}
},
"oneOf": [
{
"required":["alarms"]
},
{
"required":["events"]
},
{
"required":["statistics"]
}
]
},
}
通过查看您的示例,您似乎试图避免拥有具有多个属性的对象。如果是这样的话,我会这样做:
{
"type": "array",
"items": {
"type": "object",
"patternProperties": {
"^(alarms|events|statistics)$": {
"type": "integer"
}
},
"additionalProperties": false,
"minProperties": 1,
"maxProperties": 1
}
}
我写了架构:
{
"type": "array",
"items": {
"type": "object",
"properties": {
"alarms": {
"type": "integer"
},
"events": {
"type": "integer"
},
"statistics": {
"type": "integer"
}
}
},
"oneOf": [
{
"required":["alarms"],
"required":["events"],
"required":["statistics"]
}
]
}
不幸的是,架构允许:
[{alarms: 1, events: 1}, {events:1}, {statistics:3}]
我的目标是正确验证:
[{alarms: 1, {events:3}, {statistics:7}]
我尝试过,但没有成功。
根据 JSON 架构的 documentation 和您的示例,您要做的是验证 "Items" 对象。此外,您在 "oneOf" 验证中存在错误。您应该将 3 个对象添加到 "oneOf" 数组中,而您只有一个对象具有 3 个相同的参数。
{
"type": "array",
"items": {
"type": "object",
"properties": {
"alarms": {
"type": "integer"
},
"events": {
"type": "integer"
},
"statistics": {
"type": "integer"
}
},
"oneOf": [
{
"required":["alarms"]
},
{
"required":["events"]
},
{
"required":["statistics"]
}
]
},
}
通过查看您的示例,您似乎试图避免拥有具有多个属性的对象。如果是这样的话,我会这样做:
{
"type": "array",
"items": {
"type": "object",
"patternProperties": {
"^(alarms|events|statistics)$": {
"type": "integer"
}
},
"additionalProperties": false,
"minProperties": 1,
"maxProperties": 1
}
}