2012-10-23 26 views
9

क्या JSON स्कीमा से जावास्क्रिप्ट टाइप किए गए ऑब्जेक्ट (जेएस फ़ंक्शन) उत्पन्न करने के लिए कोई लाइब्रेरी है? मूल रूप से इस http://code.google.com/p/jsonschema2pojo/ के बराबर जेएस संस्करण। धन्यवाद।JSON स्कीमा जावास्क्रिप्ट टाइप किए गए ऑब्जेक्ट

संपादित करें:

से शुरू:

{ 
    "description": "An entity", 
    "type":"object", 
    "properties": { 
     "geometries": {"type": "array", 
      "items": { 
       "$ref" : "geometry" 
      } 
      } 
    } 
} 

मैं इस तरह कुछ कोड पाना चाहते हैं मुझे

function Entity { 
    this.geometries; 
} 

जाहिर स्कीमा $ रेफरी के साथ और अधिक जटिल हो सकता है के लिए उत्पन्न करने आदि। मुझे उम्मीद है कि यह विचार देता है।

+0

JSON मान्य जावास्क्रिप्ट है, आपको पता है। –

+0

कृपया, कुछ कोड पोस्ट करें। –

+1

स्टैक ओवरफ़्लो में आपका स्वागत है। आप '{}' टूलबार बटन के साथ स्रोत कोड प्रारूपित कर सकते हैं। मैंने इस बार आपके लिए यह किया है। –

उत्तर

-1

एकमात्र चीज जो आप कर सकते हैं वह _type_ संपत्ति को अपने जेसन ऑब्जेक्ट्स में जोड़ना है (इसे किसी अजीब तरीके से नाम दें ताकि यह अन्य अक्षरों से टकराव न हो) जो आपके प्रकार की पहचान करे। फिर आप उस स्ट्रिंग को जावास्क्रिप्ट में किसी अन्य ऑब्जेक्ट पर मैप कर सकते हैं जो उपलब्ध गुणों को सूचीबद्ध करता है।

आप यह कर सकते हैं - इसका मतलब यह नहीं है कि यह एक अच्छा विचार है। जेसन सीधे जावास्क्रिप्ट में इस्तेमाल किया जाता है।

0

मैं कहूंगा कि आप उस पर अपने आप हैं। वैसे भी, ऐसा करना बहुत कठिन नहीं होना चाहिए। बस जेएसओएन को पार्स करें और फिर प्रत्येक आइटम पर फिर से भरें, प्रत्येक "कक्षा" के लिए इच्छित तर्क लागू करें और परिणाम को स्ट्रिंग में संलग्न करें। एक बार हो जाने पर, उस स्ट्रिंग को प्रिंट करें और अपना कोड प्राप्त करने के लिए किसी भी जेएस फॉर्मेटर का उपयोग करें।

+1

धन्यवाद, अगर वहां पहले से कुछ भी था तो बस दिलचस्पी थी। यह भी सुनिश्चित नहीं है कि जेएसओएन वस्तुओं की बजाय उन वस्तुओं के साथ काम करना एक अच्छा विचार है। – Tarelli

+0

यह इस बात पर निर्भर करता है कि आप वास्तव में क्या करने की कोशिश कर रहे हैं। मुझे सी # के लिए कुछ समान दिखना याद है, लेकिन यह सुनिश्चित नहीं है कि कहां है, तो शायद आपको Google को आज़माएं। – alexandernst

2

क्या यह djvi पुस्तकालय आपकी आवश्यकताओं को कवर करता है?

प्रदान की उदाहरण दिखाता है:

var jsonSchema = {"common":{"properties":{"type":{"enum":["common"]}},"required":["type"]}}; 

var env = new djvi(); 
env.addSchema('test', jsonSchema); 
env.instance('test#/common'); 
// => { type: 'common' } 

मुझे लगता है कि समाधान आप के बाद कर रहे हैं।

अब इस सटीक समाधान आप के बाद कर रहे हैं नहीं है, लेकिन मैं एक ऐसी ही समस्या थी और एक समारोह के रूप में एक माता पिता वस्तु वापस जाने के लिए निम्नलिखित समाधान बनाया है, यह मदद कर सकते हैं:

var dbdict = { 
    "title": "Entity", 
    "description": "An entity", 
    "type":"object", 
    "properties": { 
     "geometries": {"type": "array", 
      "items": { 
       "$ref" : "geometry" 
      } 
      } 
    } 
} 

var walkJSONSchema = function (JSONSchema, returnFunction) { 

    var walkObject = function(PROPS) { 
     var $this = this, 
      $child = {} 
     ; 

     if(returnFunction == true) { 
      $child = new function() {}; 
     } 

     //console.log("PROPS"); 
     //console.log(PROPS); 

     for(var key in PROPS) { 
      console.log("key:"+key+" type:"+PROPS[key].type+" default:"+PROPS[key].default); 
      switch(PROPS[key].type) { 
       case "boolean": 
        $child[key] = PROPS[key].default || undefined; 
        break; 
       case "integer": 
       case "number": 
        $child[key] = PROPS[key].default || undefined; 
        break; 
       case "array": 
        $child[key] = [].push($this.walkObject(PROPS[key].properties)); 
        break; 
       case "object": 
        $child[key] = $this.walkObject(PROPS[key].properties); 
        break; 
       case "string": 
        $child[key] = PROPS[key].default || undefined; 
        break; 
      }; 
     }; 

     return $child; 
    } 

    return walkObject(JSONSchema.properties); 
} 

Entity = walkJSONSchema(dbdict, true); 
बेशक

आप कर सकते थे स्कीमा दस्तावेज़ से "इकाई" की पुनर्प्राप्ति स्क्रिप्ट हालांकि आपको पसंद है, लेकिन इस तरह से कम से कम आपको एक फ़ंक्शन मिलता है।

संबंधित मुद्दे