2017-06-16 127 views
0

我正在使用python 2.7 jsonschema驗證方法來驗證對jsonSchema的響應json。Python jsonschema驗證不能按預期工作

我jsonSchema是一本字典如下:

我試圖驗證對這一模式
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是

{ 
    "Country": { 
    "State": { 
    "City": { 
     "lat": "PP_4001", 
     "long": "Invalid GlobalParameters" 
    }, 
    "StateCode": "2017-06-16 18:15:14.442000", 
    "StateFlagColor": "400", 
"StateCapital": "ERROR" 
    } 
    } 
} 

Python代碼片段來驗證JSON數據對JSON模式是

import jsonschema 
    from jsonschema import validate 

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

如果您在架構中看到該元素的名稱是StateFlagCo lor111和json數據中的元素是stageFlagColor。我不確定它如何不爲這種驗證拋出異常。它總是通過。

然後,出於好奇,我創建了一個非常基本的jsonSchema,像這樣試圖驗證與上述相同的josn數據對這個新模式。

schema1 = { 
    "type": "object", 
    "properties":{ 
     "x1":{"type":"string"} 
     } 
    } 

jsondata也驗證了這個簡單的模式。

我不知道我在這裏錯過了什麼。我應該如何做這項工作?

回答

2

默認情況下,架構將允許對象包含其他未明確指定的屬性。您需要在頂層和子對象(州和城市)內添加"additionalProperties": false以禁用此功能。

另外,您的模式沒有任何必需的屬性。再次,如果你想要任何東西需要,你需要在適當的水平required陣列。

+0

謝謝。這按照你的建議工作 – Hary