2009-10-02 13 views
10

स्ट्रिंग से गतिशील ऑब्जेक्ट कैसे बना सकता है?ऑब्जेक्ट बनाने के लिए कैसे ऑब्जेक्ट बनाने के लिए actioncript 3.0 (as3)

var s1:String = '{x:200, y:400}'; 
var o1:Object = Object(s1); 

trace(o1); // result = {x:200, y:400} 
trace(o1.x) // result = ReferenceError: Error #1069: Property x not found on String and there is no default value. 
trace(o1.y) // result = ReferenceError: Error #1069: Property x not found on String and there is no default value. 

मैं निम्नलिखित उत्पादन करने के लिए पिछले कोड चाहते हैं:

यहाँ गलत परिणाम के साथ मेरे वर्तमान कोड है

trace(o1); // result = [object Object] 
trace(o1.x); // result = 200 
trace(o1.y); // result = 400 

अग्रिम धन्यवाद!

उत्तर

4

as3corelib में एक JSON पार्सर है जो आपके लिए यह करेगा। सुनिश्चित करें कि आप issues list का अध्ययन करते हैं क्योंकि इस लाइब्रेरी की कोई नई रिलीज नहीं हुई है और इसमें बहुत सारी बग हैं, जिन्हें ज्यादातर मुद्दों की सूची में संबोधित किया जाता है।

+1

मैं बस के बारे में एक ही चीज जवाब देने के लिए था :) विशिष्ट समस्या को हल करने उस lib में JSON क्लास का उपयोग कर रहे हैं: 'JSON.decode (str) 'और' JSON.encode (obj)' दूसरी तरफ जाने के लिए। – JStriedl

+0

बग के बारे में, लोग इसे ठीक कर रहे हैं। देखें: http://code.google.com/p/as3corelib/source/list। आपको सिर्फ एसवीएन से जांच करने की ज़रूरत है। –

+0

जैसा कि मैंने कहा, "कोई नई रिलीज नहीं है", लेकिन हाँ, यह जानना अच्छा है। – spender

4

यदि यह सबसे अच्छा तरीका है मैं नहीं जानता, लेकिन:

var serializedObject:String = '{x:200,y:400}' 
var object:Object = new Object() 

var contentWithoutBraces:String = serializedObject.substr(serializedObject.indexOf('{') + 1) 
contentWithoutBraces = contentWithoutBraces.substr(0, contentWithoutBraces.lastIndexOf('}')) 

var propertiesArray:Array = contentWithoutBraces.split(',') 

for (var i:uint = 0; i < propertiesArray.length; i++) 
{ 
    var objectProperty:Array = propertiesArray[i].split(':') 

    var propertyName:String = trim(objectProperty[0]) 
    var propertyValue:String = trim(objectProperty[1]) 

    object[propertyName] = Object(propertyValue) 
} 

trace(object) 
trace(object.x) 
trace(object.y) 

यह है कि तुम क्या चाहते हो जाएगा।

आप एक पुनरावर्ती तरीके से ऐसा कर सकते हैं, इसलिए यदि वस्तु अन्य वस्तुओं को भी बदल रहे हैं होता है;)

पुनश्च: मैं ट्रिम समारोह में शामिल कर सकता है, लेकिन इस समारोह एक स्ट्रिंग प्राप्त है और एक नया स्ट्रिंग रिटर्न शुरुआत में या स्ट्रिंग के अंत में रिक्त स्थान के बिना।

3

रिकॉर्ड के लिए, JSON पार्सर उदाहरण में स्ट्रिंग को पार्स नहीं करेगा, क्योंकि JSON को सदस्य नामों के चारों ओर उद्धरण की आवश्यकता है। तो स्ट्रिंग:

var s1:String = '{x:200, y:400}'; 

... बजाय होता हो:

var s1:String = '{"x":200, "y":400}'; 

यह थोड़ा भ्रमित है कि ऑब्जेक्ट नोटेशन, की तरह हो सकता है {x: 200, वाई: 400}, वह यह है कि एक्शनस्क्रिप्ट और जावास्क्रिप्ट दोनों में मान्य मान्य JSON नहीं है, लेकिन अगर मुझे यह सही याद है, तो आरक्षित शब्दों के साथ संभावित संघर्षों से बचने के लिए सदस्य नामों के आसपास उद्धरण आवश्यक हैं।

http://simonwillison.net/2006/Oct/11/json/

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