2014-01-06 2 views
0

Я использую JSON схему, которая должна определить экран с произвольным количеством кнопок:Схема JSON со ссылками: почему обязательное поле не найдено?

{ 
    "$schema": "http://json-schema.org/draft-03/schema", 
    "type": "object", 
    "properties": { 
     "Screen": { 
      "type": "object", 
      "properties": { 
       "Widgets": { 
        "type": "array", 
        "required": true, 
        "items": { 
         "$ref": "#/properties/Button" 
        } 
       } 
      } 
     }, 
     "Button": { 
      "type": "object", 
      "properties": { 
       "title": { 
        "required": true, 
        "type": "string" 
       } 
      } 
     } 
    } 
} 

Это JSON я проверка против:

{ 
    "Screen": { 
     "Widgets": [ 
      { 
       "Button": { 
        "title": "10" 
       } 
      } 
     ] 
    } 
} 

Я использую http://json-schema-validator.herokuapp.com/ как проверочные и здесь я получаю следующее сообщение об ошибке:

[ { 
    "level" : "error", 
    "schema" : { 
    "loadingURI" : "#", 
    "pointer" : "/properties/Button" 
    }, 
    "instance" : { 
    "pointer" : "/Screen/Widgets/0" 
    }, 
    "domain" : "validation", 
    "keyword" : "properties", 
    "message" : "missing required property(ies)", 
    "required" : [ "title" ], 
    "missing" : [ "title" ] 
} ] 

Необходимое поле title сообщается как отсутствует, хотя в го e JSON. Я предполагаю, что я сделал что-то неправильно с ссылкой Button, но я не могу понять, как это исправить.

ответ

1

Поскольку в соответствии с вашей схемой каждый элемент массива Widgets должен соответствовать схеме, определенной в #/properties/Button. В этой схеме указано, что каждая кнопка должна быть Json Object с требуемым свойством «title». В коде:

{"title": "10"} 

Но вы предоставили объект JSON с собственностью под названием «Button», который не является ограничением вы указали.

Опасайтесь, что вы используете схему Json-schema draft03, вы должны взглянуть на draft04, хотя для этого случая это не так.

+0

Это * немного * разные - в частности, использование 'required'. – cloudfeet

0

Действительно JSON для данной схемы является: `

{ 
    "Screen": { 
    "Widgets": [ 
     { 
     "title": "10" 
     } 
    ] 
    } 
} 

`

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

  • Нет связанных вопросов^_^