JSON Schema oneOf属性已填充

时间:2014-02-04 23:41:42

标签: json jsonschema

如何设置JSON Schema规则以确定其中一个属性必须设置并且是必需的?

我尝试了各种方法来解决它:

{
   "id":"#",
   "required":true,
   "additionalProperties":true,
   "type":"object",
   "properties":{
      "surname":{
         "id":"surname",
         "required":true,
         "type":"string"
      },
      "oneOf":[
         {
            "$ref":"#/definitions/station_id"
         },
         {
            "$ref":"#/definitions/station"
         }
      ]
   },
   "definitions":{
      "station_id":{
         "type":"integer"
      },
      "station":{
         "type":"string"
      }
   }
}

但它从未奏效。我需要做的是接受station_id什么是整数或者什么是字符串名称。

请问有办法吗?

1 个答案:

答案 0 :(得分:21)

oneOf仅在架构内直接使用时才是特殊的。当您在oneOf内使用properties时,它没有特殊含义,因此您实际上最终定义了一个名为"oneOf"的属性。

此外 - 不是必需的属性定义,它是required关键字。此关键字是必需属性的数组(不是布尔值,即旧语法)。

要执行您想要的操作,您需要制作一个oneOf子句,其中一个选项需要"station_id",另一个选项需要"station"

{
    "oneOf": [
        {"required": ["station"]},
        {"required": ["station_id"]}
    ]
}

如果两个都存在,那么数据将无效(因为只允许一个oneOf条目通过)。