2013-11-22 5 views
2

Я новичок в проверке схемы JSON и JSON.Объединить два Json Schemas

Я имею следующую схему для проверки одного объекта сотрудника:

{ 
    "$schema":"http://json-schema.org/draft-03/schema#", 
    "title":"Employee Type Schema", 
    "type":"object", 
    "properties": 
    { 
     "EmployeeID": {"type": "integer","minimum": 101,"maximum": 901,"required":true}, 
     "FirstName": {"type": "string","required":true}, 
     "LastName": {"type": "string","required":true}, 
     "JobTitle": {"type": "string"}, 
     "PhoneNumber": {"type": "string","required":true}, 
     "Email": {"type": "string","required":true}, 
     "Address": 
     { 
      "type": "object", 
      "properties": 
      { 
       "AddressLine": {"type": "string","required":true}, 
       "City": {"type": "string","required":true}, 
       "PostalCode": {"type": "string","required":true}, 
       "StateProvinceName": {"type": "string","required":true} 
      } 
     }, 
     "CountryRegionName": {"type": "string"} 
    } 
} 

и я имею следующую схему для проверки массива того же объекта сотрудника:

{ 
    "$schema": "http://json-schema.org/draft-03/schema#", 
    "title": "Employee set", 
    "type": "array", 
    "items": 
    { 
     "type": "object", 
     "properties": 
     { 
      "EmployeeID": {"type": "integer","minimum": 101,"maximum": 301,"required":true}, 
      "FirstName": {"type": "string","required":true}, 
      "LastName": {"type": "string","required":true}, 
      "JobTitle": {"type": "string"}, 
      "PhoneNumber": {"type": "string","required":true}, 
      "Email": {"type": "string","required":true}, 
      "Address": 
      { 
       "type": "object", 
       "properties": 
       { 
        "AddressLine": {"type": "string","required":true}, 
        "City": {"type": "string","required":true}, 
        "PostalCode": {"type": "string","required":true}, 
        "StateProvinceName": {"type": "string","required":true} 
       } 
      }, 
      "CountryRegionName": {"type": "string"} 
     } 
    } 
} 

Можете ли вы показать мне как объединить их так, чтобы я мог использовать одну единственную схему для проверки как одного объекта сотрудника, так и всей коллекции. Благодарю.

ответ

1

(Примечание: этот вопрос был также задан вопрос о JSON Schema Google Group, и этот ответ адаптировано оттуда.)

С «$ref», вы можете иметь что-то подобное для массива:

{ 
    "type": "array", 
    "items": {"$ref": "/schemas/path/to/employee"} 
} 

Если вы хотите что-то, чтобы быть массивом или один элемент, то вы можете использовать «oneOf»:

{ 
    "oneOf": [ 
     {"$ref": "/schemas/path/to/employee"}, // the root schema, defining the object 
     { 
      "type": "array", // the array schema. 
      "items": {"$ref": "/schemas/path/to/employee"} 
     } 
    ] 
} 

В исходном ответе Группы Google также содержатся рекомендации по использованию "definitions" для организации схем, поэтому все эти варианты могут существовать в одном файле.

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