对对象数组的要求

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
    }
}