2012-01-22 4 views
9

Estoy tratando con la entrada de datos en forma de documentos json. Estos documentos deben tener un formato determinado; si no son conformes, deben ignorarse. Actualmente estoy usando una lista desordenada de 'si hay' para verificar el formato del documento json.validación de la estructura de datos de python utilizando Validator (o algo similar)

He estado experimentando un poco con diferentes bibliotecas python json-schema, que funciona bien, pero todavía puedo enviar un documento con claves no descritas en el esquema, lo que me hace inútil.

Este ejemplo no genera una excepción aunque yo esperaría que:

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

Mi pregunta es doble:

  • estoy pasando por alto algo en la definición del esquema?
  • Si no, ¿hay alguna otra forma ligera de abordar esto?

Gracias,

Jay

Respuesta

8

Añadir "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

gracias, echaba de menos que uno. Es justo lo que necesito. –

Cuestiones relacionadas