Json架构限制同一对象的编号

时间:2017-08-14 11:20:51

标签: json jsonschema

有没有办法,创建一个json模式,限制对象可以发生的数量? 或者确保一个对象是唯一的?

最后,我想要像

这样的东西
 {
  "days": {
   "monday": {
    "schedule": {
     "start_time": "23:35"
    }
   },
   "tuesday": {
    "schedule": {
     "start_time": "23:23"
    }
   }
  }
 }

在这个json中,每一天应该只出现一次。就像每天一个开始时间。

到目前为止,我尝试使用以下架构,但根本没有成功。 使用这种模式,我可以有多个"星期一"我的json中的对象和模式仍然有效。但我正在寻找的是一种对多个对象无效的模式。

 {
   "$schema": "http://json-schema.org/schema#",
   "title": "DayScheduler",
   "type": "object",
   "required": [
     "days"
   ],
   "properties": {
     "days": {
       "monday": {
         "$ref": "#/definitions/scheduler"
       },
       "tuesday": {
         "$ref": "#/definitions/scheduler"
       },
       "wednesday": {
         "$ref": "#/definitions/scheduler"
       },
       "thursday": {
         "$ref": "#/definitions/scheduler"
       },
       "friday": {
         "$ref": "#/definitions/scheduler"
       },
       "saturday": {
         "$ref": "#/definitions/scheduler"
       },
       "sunday": {
         "$ref": "#/definitions/scheduler"
       }
     }
   },
   "definitions": {
     "scheduler": {
       "type": "object",
       "required": [
         "schedule"
       ],
       "properties": {
         "schedule": {
           "type": "object",
           "required": [
             "start_time"
           ],
           "properties": {
             "start_time": {
               "type": "string",
               "pattern": "^([01]?[0-9]|2[0-3]):[0-5][0-9]"
             }
           }
         }
       }
     }
   }
 }

有没有办法用json架构实现这个目标?

2 个答案:

答案 0 :(得分:2)

JSON中不允许重复键。 JSON Schema旨在验证JSON数据。它没有配备来验证无效JSON的数据。

此示例有助于说明无效的原因。

var value = {
  "foo": 1,
  "foo": 2
}

如果您将此评估为JavaScript对象并尝试访问此对象的foo属性:value.foo === ???,是1还是2?它含糊不清。

答案 1 :(得分:0)

我在JSON方面的经验让我明白,如果你有多个具有相同密钥的对象,那么最后一个对象的值将被用于密钥。 您可以尝试添加

{
   "name": name,
   type: object,
   properties: {
      a:b,
      c:d
   },
   "additionalProperties": false
}

到您的架构,但我仍然认为每个键的最后一次出现都将被视为值。