使用Validator(或类似的东西)进行python数据结构验证

时间:2012-01-22 12:39:36

标签: python json validation jsonschema

我正在以json文档的形式处理数据输入。 这些文档需要具有某种格式,如果它们不符合要求,则应忽略它们。我目前正在使用一个杂乱的'if thens'列表来检查json文档的格式。

我一直在尝试使用不同的python json-schema库,这可以正常工作,但是我仍然可以使用模式中没有描述的密钥提交文档,这对我来说没用。

虽然我期望它,但这个例子不会产生异常:

#!/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 个答案:

答案 0 :(得分:9)

添加"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)