2012-01-22 19 views
9

मैं जेसन दस्तावेज़ों के रूप में डेटा इनपुट से निपट रहा हूं। इन दस्तावेजों को एक निश्चित प्रारूप होना चाहिए, अगर वे अनुपालन नहीं कर रहे हैं, तो उन्हें अनदेखा किया जाना चाहिए। मैं वर्तमान में जेसन दस्तावेज़ के प्रारूप की जांच करने के लिए 'if thens' की गन्दा सूची का उपयोग कर रहा हूं।वैलिडेटर (या कुछ समान) का उपयोग कर पायथन डेटा संरचना सत्यापन

मैं अलग अजगर json-स्कीमा पुस्तकालयों के साथ एक सा है, जो ठीक काम करता है प्रयोग कर रहे हैं, लेकिन मैं अभी भी स्कीमा है, जो यह मेरे लिए बेकार बनाता में वर्णित नहीं कुंजी के साथ एक दस्तावेज प्रस्तुत करने में सक्षम हूँ।

यह उदाहरण हालांकि मैं यह उम्मीद होती है एक अपवाद उत्पन्न नहीं करता है:

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

मेरा प्रश्न दोहरा है:

  • मैं स्कीमा परिभाषा कुछ अनदेखी कर रहा हूँ?
  • यदि नहीं, तो क्या यह दृष्टिकोण करने का एक और हल्का तरीका है?

धन्यवाद,

जे

उत्तर

8

"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

धन्यवाद, मैं याद किया है कि एक। यह वही है जो मुझे चाहिए। –