2012-09-17 25 views
17

पर कनवर्ट करें क्या JSON स्कीमा को एक पायथन क्लास परिभाषा में परिवर्तित करने के लिए एक पायथन लाइब्रेरी है, जो jsonschema2pojo - https://github.com/joelittlejohn/jsonschema2pojo - जावा के लिए है?एक JSON स्कीमा को एक पायथन कक्षा

+0

क्या आप विस्तार कर सकते हैं कि [json] (http://docs.python.org/library/json.html) मानक लाइब्रेरी मॉड्यूल की कार्यक्षमता आपकी आवश्यकताओं के लिए पर्याप्त नहीं है और आपको जेनरेट की गई क्लास परिभाषाओं की आवश्यकता है? –

+5

आपकी टिप्पणी का उत्तर बहुत आसान है - कच्चे शब्दकोशों के साथ काम करना दूसरी कक्षा वस्तु प्रबंधन है और अधिकांश लोगों को जेएसओएन प्रदान किए जाने वाले चेहरे पर घुंघराले-ब्रैकेट शॉटगन विस्फोट पसंद नहीं है। निम्नलिखित पर – synthesizerpatel

उत्तर

17

अब तक निकटतम बात मैं पता लगाने के लिए कर लिया है warlock है, जो इस कार्यप्रवाह का विज्ञापन करता है:

अपने स्कीमा बिल्ड

>>> schema = { 
    'name': 'Country', 
    'properties': { 
     'name': {'type': 'string'}, 
     'abbreviation': {'type': 'string'}, 
    }, 
    'additionalProperties': False, 
} 

एक मॉडल बनाएं

>>> import warlock 
>>> Country = warlock.model_factory(schema) 

अपने मोड का उपयोग कर ऑब्जेक्ट बनाएं एल

>>> sweden = Country(name='Sweden', abbreviation='SE') 

हालांकि, यह इतना आसान नहीं है। ऑब्जेक्ट्स जो वारॉकॉक आत्मनिर्भर उपहारों के रास्ते में बहुत कम पैदा करता है। और अगर यह प्रारंभिक रूप से नेस्टेड डाइक का समर्थन करता है, तो मैं यह समझने में असमर्थ था कि उन्हें कैसे काम करना है।

थोड़ा पृष्ठभूमि देने के लिए, जिस समस्या पर मैं काम कर रहा था वह था कि Chrome's JSONSchema API कैसे लें और अनुरोध जेनरेटर और प्रतिक्रिया हैंडलर का पेड़ तैयार करें। वारॉक मार्क से बहुत दूर नहीं लग रहा है, केवल नकारात्मक पक्ष यह है कि पायथन में मेटा-क्लासेस वास्तव में 'कोड' में नहीं बदला जा सकता है। - (जो करामाती के शीर्ष पर बनाया गया है)

  • valideer - jsonschema के लिए, लेकिन एक बुरा नाम के साथ इसी तरह

    • jsonschema:

      अन्य उपयोगी मॉड्यूल को देखने के लिए।

    • bunch - मैं एक खोजने के लिए अच्छा लगेगा - एक दिलचस्प संरचना बिल्डर आधे रास्ते a dotdict और construct

    आप इससे आपके प्रश्न का कृपया अनुवर्ती कार्रवाई के लिए एक अच्छा वन-स्टॉप समाधान ढूँढने अंत तो बीच

  • thats। मैंने github, pypi, googlecode, sourceforge, आदि के माध्यम से डाला .. और बस कुछ भी वास्तव में सेक्सी नहीं मिला।

    किसी भी पूर्व-निर्मित समाधान की कमी के लिए, मैं संभवतः वारॉक के साथ कुछ जोड़ता हूं। तो अगर मैंने आपको इसे हराया, तो मैं अपना जवाब अपडेट करूंगा। : P

    +1

    Ditto। मैं एक ही स्रोत के माध्यम से चला गया और कोई स्वीकार्य समाधान नहीं मिला। मैंने भी वारॉक फोर्क किया और अपनी कक्षा परिभाषा में रिकर्सन लागू करने पर काम करना शुरू कर दिया (जो ऐसा लगता है कि यह काफी आसान होना चाहिए), लेकिन छोड़ दिया। –

    5

    python-jsonschema-objects, जादूगर के लिए एक विकल्प है निर्माण jsonschema के शीर्ष पर

    अजगर-jsonschema वस्तुओं अजगर में उपयोग के लिए JSON स्कीमा के लिए बाध्य एक स्वचालित वर्ग आधारित प्रदान करता है।

    उपयोग:

    नमूना Json स्कीमा

    schema = '''{ 
        "title": "Example Schema", 
        "type": "object", 
        "properties": { 
         "firstName": { 
          "type": "string" 
         }, 
         "lastName": { 
          "type": "string" 
         }, 
         "age": { 
          "description": "Age in years", 
          "type": "integer", 
          "minimum": 0 
         }, 
         "dogs": { 
          "type": "array", 
          "items": {"type": "string"}, 
          "maxItems": 4 
         }, 
         "gender": { 
          "type": "string", 
          "enum": ["male", "female"] 
         }, 
         "deceased": { 
          "enum": ["yes", "no", 1, 0, "true", "false"] 
          } 
        }, 
        "required": ["firstName", "lastName"] 
    } ''' 
    

    वर्ग के लिए स्कीमा ऑब्जेक्ट परिवर्तित

    import python_jsonschema_objects as pjs 
    builder = pjs.ObjectBuilder(schema) 
    ns = builder.build_classes() 
    Person = ns.ExampleSchema 
    james = Person(firstName="James", lastName="Bond") 
    james.lastName 
        u'Bond' james  
    example_schema lastName=Bond age=None firstName=James 
    

    मान्यता:

    james.age = -2 python_jsonschema_objects.validators.ValidationError: -2 was less or equal to than 0

    लेकिन समस्या यह है कि यह अभी भी ड्राफ्ट 4 अमान्यता का उपयोग कर रहा है, जबकि jsonschema ड्राफ्ट 4 validation पर स्थानांतरित हो गया है, मैंने इसके बारे में रेपो पर समस्या दायर की है। जब तक आप jsonschema के पुराने संस्करण का उपयोग नहीं कर रहे हैं, उपरोक्त पैकेज दिखाए गए अनुसार काम करेगा।