2017-01-25 17 views
0

Схема должна проверять следующие объекты json и не должна допускать дополнительного свойства.Как написать схему json для обеспечения условного существования других свойств?

{ 
    "id": "11111111111111111111111111111111", 
    "status": "employed", 
    "company_name": "Google" 
} 

{ 
    "id": "00000000000000000000000000000000", 
    "status": "unemployed" 
} 

Схема проекта v4:

{ 
    "type": "object", 
    "additionalProperties":false, 
    "required": [ 
    "status", 
    "id" 
    ], 
    "properties": { 
    "id": { 
     "type": "string" 
    }, 
    "status": { 
     "type": "string", 
     "enum":["unemployed", "employed"] 
    }, 
    "company_name": { 
     "type": "string" 
    } 
    }, 
    "dependencies": { 
    "company_name": { 
     "properties": { 
     "status": { 
      "enum": [ 
      "employed" 
      ] 
     } 
     } 
    } 
    } 
} 

Эта схема выглядит правильно, но это не делает недействительным следующий объект JSON.

{ 
    "id": "00000000000000000000000000000001", 
    "status": "employed" 
} 

Он должен быть недействительным, поскольку «статус» «используется», но не обязательно указано свойство «company_name».

+0

см. Http://stackoverflow.com/questions/41837518/removing-the-duplication-in-a-json-schema-that-uses-oneof-v4-or-v5/41838321?noredirect=1#comment70862053_41838321 – esp

+0

@esp. Неясно, не там. Пожалуйста, уточните. Согласно моему наблюдению: я использую последний (лучший) :) Есть ли что-то, что мне не хватает – Nilesh

+0

@esp Я добавил ответ. Пожалуйста, добавьте еще один ответ на **, как это сделать, используя зависимости. ** – Nilesh

ответ

1

Это возможно, используя anyOf, но не знаете, как это сделать, используя dependencies.

{ 
    "type": "object", 
    "additionalProperties": false, 
    "required": [ 
    "status", 
    "id" 
    ], 
    "properties": { 
    "id": { 
     "type": "string" 
    }, 
    "status": { 
     "type": "string", 
     "enum": [ 
     "unemployed", 
     "employed" 
     ] 
    }, 
    "company_name": { 
     "type": "string" 
    } 
    }, 
    "anyOf": [ 
    { 
     "properties": { 
     "status": { 
      "enum": [ 
      "employed" 
      ] 
     } 
     }, 
     "required": [ 
     "company_name" 
     ] 
    }, 
    { 
     "properties": { 
     "status": { 
      "enum": [ 
      "unemployed" 
      ] 
     } 
     }, 
     "not": { 
     "required": [ 
      "company_name" 
     ] 
     } 
    } 
    ] 
} 

@esp.