首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python jsonschema验证未按预期工作

Python jsonschema验证未按预期工作
EN

Stack Overflow用户
提问于 2017-06-17 06:28:00
回答 1查看 2.3K关注 0票数 2

我正在使用python2.7jsonschema validate方法来验证针对jsonSchema的响应json。

我的jsonSchema是一个字典,如下所示:

代码语言:javascript
复制
schema = {
    "type" : "object",
    "properties" : {
        "Country": {"type": "object",
                    "properties":{
                        "State" : { "type" : "object",
                                     "properties": {
                                     "city": {"type": "object",
                                                       "properties":{
                                                           "lat":{"type": "string"},
                                                           "long": {"type": "string"}
                                                           } 
                                                       },
                                    "StateCode": {"type": "string"},
                                    "StateFlagColor111": {"type": "string"},
                                    "StateCapital": {"type": "string"}
                                  }
                                }
                            }
                    }
                 }   
          }                                

我尝试针对此模式验证的响应json是

代码语言:javascript
复制
{
  "Country":   {
  "State": {
    "City": {
      "lat": "PP_4001", 
      "long":  "Invalid GlobalParameters"
    }, 
  "StateCode": "2017-06-16 18:15:14.442000", 
  "StateFlagColor": "400", 
 "StateCapital": "ERROR"
  }
  }
}

根据json模式验证json数据的Python代码片段是

代码语言:javascript
复制
   import jsonschema 
   from jsonschema import validate

   try:
       validate(responseDataJson, schema)            
       print 'good json'
   except jsonschema.exceptions.ValidationError as ve:
      print 'bad json' + str(ve)

如果您在模式中看到,元素的名称是StateFlagColor111,而json数据中的元素是stageFlagColor。我不确定它如何不为这样的验证抛出异常。它总是会过去。

然后,出于好奇,我创建了一个非常基本的jsonSchema,并尝试根据这个新模式验证与上面相同的josn数据。

代码语言:javascript
复制
schema1 = {
    "type": "object",
    "properties":{
        "x1":{"type":"string"}
        }
    }

jsondata也根据这个简单的模式进行了验证。

我不确定我在这里遗漏了什么。我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-17 06:34:41

默认情况下,架构将允许对象包含您尚未显式指定的其他属性。要禁用此功能,需要在子对象(州和城市)的顶层和子对象内部添加"additionalProperties": False

此外,您的模式没有任何必需的属性。同样,如果您希望需要任何属性,则需要适当级别的required数组。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44598808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档