2014-12-08 6 views
7

У меня есть объект JSON, который может содержать любое количество вложенных объектов с определенной спецификацией, например:словарь типа JSON схемы

{ 
    "Bob": { 
    "age": "42", 
    "gender": "male" 
    }, 
    "Alice": { 
    "age": "37", 
    "gender": "female" 
    } 
} 

И хотел бы иметь схему ищет что-то вроде:

{ 
    "type": "object", 
    "propertySchema": { 
    "type": "object", 
    "required": [ 
     "age", 
     "gender" 
    ], 
    "properties": { 
     "age": { 
     "type": "string" 
     }, 
     "gender": { 
     "type": "string" 
     } 
    } 
    } 
} 

Я знаю, что могу превратить это в массив и нажать «имя» внутри объектов. В этом случае моя схема будет выглядеть так:

{ 
    "type": "array", 
    "items": { 
    "type": "object", 
    "required": [ 
     "name", 
     "age", 
     "gender" 
    ], 
    "properties": { 
     "name": { 
     "type": "string" 
     }, 
     "age": { 
     "type": "string" 
     }, 
     "gender": { 
     "type": "string" 
     } 
    } 
    } 
} 

, но я хотел бы иметь словарь-подобную структуру. Можно ли сделать такую ​​схему?

ответ

17

additionalProperties ваше ключевое слово:

{ 
    "type" : "object", 
    "additionalProperties" : { 
     "type" : "object", 
     "required" : [ 
      "age", 
      "gender" 
     ], 
     "properties" : { 
      "age" : { 
       "type" : "string" 
      }, 
      "gender" : { 
       "type" : "string" 
      } 
     } 
    } 
} 

additionalProperties может иметь следующие значения с разными значениями:

  • "additionalProperties": false Нет больше свойств допустимы.
  • "additionalProperties": true Любые свойства разрешены. Это поведение по умолчанию.
  • "additionalProperties": {"type": "string"} Допустимые свойства (произвольного имени) допускаются, если они имеют значение заданного типа (здесь «строка»).
  • "additionalProperties": {*any schema*} Дополнительные свойства должны соответствовать предоставленной схеме, например, приведенному выше примеру.
+0

Спасибо за хороший ответ. Я добавил несколько строк, объясняющих разные значения «дополнительные свойства». –

+0

Спасибо @JanVlcinsky за улучшение ответа (хотя использование названий для фрагментов кода кажется для меня немного излишним). – jruizaranguren

+0

Не стесняйтесь отредактировать его, как пожелаете. Вот почему я уведомил вас. Я часто использую заголовки, чтобы донести ключевую информацию немного более наглядным образом, но я могу согласиться. –

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