2017-01-06 5 views
1

С помощью этой схемы:Json схема исх другой файл

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "b": { 
    "type": "object", 
    "properties": { 
     "c": { 
     "type": "string" 
     } 
    } 
    }, 
    "type": "object", 
    "properties": { 
    "a": { 
     "$ref": "#/b" 
    } 
    } 
} 

Я могу подтвердить этот пример:

{ 
    "a": { 
    "c": "test" 
    } 
} 

Теперь я хочу, чтобы создать новый файл схемы для элемента «б» и передать его в моей первой схеме. Как я могу это сделать ? Я стараюсь много чего, но всегда получаю jsonspec.reference.exceptions.NotFound: u'b.json 'не зарегистрирован.

ответ

0

После нескольких часов поиска в Google и различных чтениях документов я наконец смог составить две json-схемы, используя "$ref" : "file:...".

Мой пример данных выглядит следующим образом:

john-doe.json:

{ 
    "first_name": "john", 
    "last_name": "doe", 
    "age": 42, 
    "address": { 
    "street_address": "foo street 42", 
    "city": "baklavastan", 
    "state": "foobar" 
    "foo": 42 
    } 
} 

И тогда я два JSon файлы схемы, которая живет в той же директории на моей файловой системе.

customer.json

{ 
    "type": "object", 
    "properties": { 
    "first_name": { "type": "string" }, 
    "last_name": { "type": "string" }, 
    "age" :  { "type" : "integer" }, 
    "address" : { "$ref" : "file:address.json#" } 
    }, 
    "required": ["first_name", "last_name", "age", "address"], 
    "additionalProperties": false 
} 

address.json

{ 
    "type": "object", 
    "properties": { 
    "street_address": { "type": "string" }, 
    "city":   { "type": "string" }, 
    "state":   { "type": "string" } 
    }, 
    "required": ["street_address", "city", "state"], 
    "additionalProperties": false 
} 

Я могу подтвердить против схемы в Clojure с использованием библиотеки scjsv (который является оберткой библиотеки Java json-schema-validation)

It дает мне следующую ошибку проверки (в clojure edn) для john-doe.json пример:

{ :level "error", 
    :schema {:loadingURI "file:address.json#", :pointer ""}, 
    :instance {:pointer "/address"}, 
    :domain "validation", 
    :keyword "additionalProperties", 
    :message 
    "object instance has properties which are not allowed by the schema: [\"foo\"]", 
    :unwanted ["foo"] }