2012-01-22 5 views
9

Mi sto occupando dell'input di dati sotto forma di documenti json. Questi documenti devono avere un determinato formato, se non sono conformi, devono essere ignorati. Attualmente sto usando un elenco disordinato di 'if thens' per verificare il formato del documento json.validazione della struttura dati python usando Validator (o qualcosa di simile)

Ho sperimentato un po 'con diverse librerie json-schema Python, che funziona bene, ma sono ancora in grado di inviare un documento con chiavi non descritte nello schema, il che lo rende inutile per me.

Questo esempio non genera un'eccezione anche se mi sarei aspettato che:

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

La mia domanda è duplice:

  • Perchè sono affacciate qualcosa nella definizione dello schema?
  • In caso contrario, c'è un altro modo leggero per avvicinarsi a questo?

Grazie,

Jay

risposta

8

Aggiungi "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

grazie, ho perso quello. È proprio quello di cui ho bisogno. –