проверка структуры данных Python с использованием Validator (или чего-то подобного) - PullRequest
10 голосов
/ 22 января 2012

Я имею дело с вводом данных в виде документов JSON.Эти документы должны иметь определенный формат, если они не соответствуют требованиям, их следует игнорировать.В настоящее время я использую грязный список 'if thens', чтобы проверить формат документа json.

Я немного экспериментировал с различными библиотеками json-схемы python, который работает нормально, но явсе еще в состоянии отправить документ с ключами, не описанными в схеме, что делает его бесполезным для меня.

Этот пример не генерирует исключение, хотя я ожидаю:

#!/usr/bin/python

from jsonschema import Validator
checker = Validator()
schema = {
    "type" : "object",
    "properties" : {
        "source" : {
            "type" : "object",
            "properties" : {
                "name" : {"type" : "string" }
            }
        }
    }
}
data ={
   "source":{
      "name":"blah",
      "bad_key":"This data is not allowed according to the schema."
   }
}
checker.validate(data,schema)

У меня двоякий вопрос:

  • Пропускаю ли я что-то в определении схемы?
  • Если нет, есть ли другой легкий способ подойти к этому?

Спасибо,

Джей

1 Ответ

9 голосов
/ 22 января 2012

Добавить "additionalProperties": False:

#!/usr/bin/python

from jsonschema import Validator
checker = Validator()
schema = {
    "type" : "object",
    "properties" : {
        "source" : {
            "type" : "object",
            "properties" : {
                "name" : {"type" : "string" }
            },
            "additionalProperties": False, # add this
        }
    }
}
data ={
   "source":{
      "name":"blah",
      "bad_key":"This data is not allowed according to the schema."
   }
}
checker.validate(data,schema)
...