2014-02-04 5 views
9

Как установить правило схемы JSON, чтобы сказать, что нужно установить только одно из свойств и требуется?JSON Schema oneOf properies заполнено

Я пробовал различные способы решить это нравится:

{ 
    "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, что является целым числом или станцией, что является именем строки.

Есть ли способ сделать это, пожалуйста?

ответ

19

oneOf является особым при использовании непосредственно внутри схемы. Когда вы используете oneOf внутри properties, тогда он не имеет особого значения, поэтому вы фактически определяете свойство, называемое "oneOf".

Также - это не определения свойств, которые делают что-то требуемое, это ключевое слово required. Это ключевое слово - массив требуемых свойств (а не булев, это старый синтаксис).

Чтобы сделать то, что вы хотите, вы делаете пункт oneOf где требуемый один вариант "station_id", а другой требуется "station":

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

Если как присутствуют, то эти данные будут недействительными (потому что только одна запись oneOf может пройти).

+0

Thanks @cloudfeet –

Смежные вопросы