2012-01-22 11 views
9

Mam do czynienia z wprowadzaniem danych w postaci dokumentów json. Te dokumenty muszą mieć określony format, jeśli nie są zgodne, należy je zignorować. Obecnie używam niechlujnej listy "jeśli te", aby sprawdzić format dokumentu json.Sprawdzanie poprawności struktury Pythona przy użyciu Validatora (lub czegoś podobnego)

Eksperymentowałem trochę z różnymi bibliotekami json-schema python, co działa dobrze, ale wciąż mogę przesłać dokument z kluczami nieopisanymi w schemacie, co czyni go bezużytecznym dla mnie.

Przykład ten nie generuje wyjątek, chociaż chciałbym go spodziewać:

#!/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) 

Moje pytanie jest dwojaki:

  • jestem widokiem coś w definicji schematu?
  • Jeśli nie, czy istnieje inny, lekki sposób podejścia do tej kwestii?

Dzięki

Jay

Odpowiedz

8

Dodaj "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) 
+0

dzięki, że brakowało mi jednego. Właśnie tego potrzebuję. –

Powiązane problemy