2009-11-11 24 views
7

मैं एक दुविधा का एक सा है। मैं एक JSON ऑब्जेक्ट एक प्रारूप मैं के साथ अपरिचित हूँ है कि राशि (एक सरणी [] के बजाय एक वस्तु {} साथ शुरू होता है) और मैं सोच रहा था कि यह कैसे AS3 में पार्स हो सकता है।AS3 JSON पार्स

[ 
    { 
     "food": [ 
      { 
       "name": "pasta", 
       "price": 14.50, 
       "quantity": 20 
      }, 
      { 
       "name": "soup", 
       "price": 6.50, 
       "quantity": 4 
      } 
     ] 
    }, 
    { 
     "food": [ 
      { 
       "name": "salad", 
       "price": 2.50, 
       "quantity": 3 
      }, 
      { 
       "name": "pizza", 
       "price": 4.50, 
       "quantity": 2 
      } 
     ] 
    } 
] 

मैं वास्तव में नहीं जानता कि मैं कैसे प्रत्येक भोजन सरणी के लिए मिलता है, और यह के भीतर प्रत्येक वस्तु: वस्तु की तरह लग रहा है। किसी भी तरह की सहायता का स्वागत किया जाएगा! धन्यवाद!

उत्तर

12

आप (लिंक नीचे) JSON वस्तु वर्ग का उपयोग करने के http://code.google.com/p/as3corelib/

और फिर कुछ इस तरह की आवश्यकता होगी ..

var data:String = "{\"name\":\"pizza\",\"price\":\"4.50\",\"quantity\":\"2\"}"; 
var food:JSONObject = new JSONObject(data); 
trace(food.name); // Pizza 
trace(food.price); // 4.50 
trace(food.quantity); // 2 
food.number++; 
var newData:String = String(food); 
trace(newData); // {"name":"pizza","price":"4.50","quantity":"2"} 
+0

मैंने उस विधि का उपयोग करने का प्रयास किया है, हालांकि मैंने जिस जेसन को ऊपर पोस्ट किया है, क्या मुझे पहले JSONArray से शुरू करने की आवश्यकता है, और फिर एक JSON ऑब्जेक्ट? चूंकि इसे पहले [] और फिर {} द्वारा लपेटा जाता है। – dtrainer45

+2

+1 AS3corelib अच्छा है। @ dtrainer45: यदि आप एडोब फ्लेक्सबिल्डर का उपयोग करते हैं, तो जेसन स्ट्रिंग को deserializing के बाद एक ब्रेकपॉइंट जोड़ें। फिर आप बनाए गए ऑब्जेक्ट ग्राफ़ की संरचना का पता लगा सकते हैं। यदि यह एक सरणी है, तो शायद यह var x: JSONObject = new JSONObject (डेटा) की तरह कुछ होना चाहिए; ट्रेस (एक्स [0] खाद्य [0] .name); हालांकि परीक्षण नहीं किया। – Max

7

दिलचस्प आंकड़ा संरचना ... इस यह करना चाहिए:

import com.adobe.serialization.json.JSON; 
/* ... other code ... */ 
var foods:Array = JSON.decode(jsonstring); 
for(var i:int = 0; i < foods.length; i++) { 
    for(var j:int = 0; j < foods[i].length; j++) { 
    trace(foods[i][j].name); 
    } 
} 
24

फ़्लैश प्लेयर 11, और एसडीके 4.6 से वहाँ json के लिए देशी समर्थन है। इसका इस्तेमाल करने के लिए आप

var foods:Array = JSON.decode(jsonstring); 

को

var foods:Array = JSON.parse(jsonstring); 

बदलना चाहिए जबकि JSON as3corelib से लेकिन एसडीके से ही नहीं है। सुंदर बहुत तेजी से;)

+3

केवल बात यह है कि को बदलने की आवश्यकता है कि 'वर खाद्य पदार्थ है: Array'' वर खाद्य पदार्थों के लिए बदल दिया जाना चाहिए: Object'। जब मैंने ऐरे के साथ प्रयास किया तो उसने कहा कि यह प्रकार JSON.parse के लिए मान्य नहीं था। – LoneWolfPR

+0

"अपरिभाषित संपत्ति JSON का उपयोग।" – Meekohi

+0

मैं एसडीके 4.5 का उपयोग कर रहा हूँ, मैं इस JSON वर्ग है भी – jondinham

2

मैं एक पुस्तकालय के लिए एक विकल्प की तलाश में और तकनीक here मिला था। मुझे लगता है कि यह ओप के संदर्भ में काम करेगा (जिसे साल पहले उत्तर दिया गया था) क्योंकि इसे ऑब्जेक्ट के रिटर्न प्रकार की आवश्यकता नहीं होती है। जब मैं इस पोस्ट को मिला तो मैं यह करने के लिए जो कुछ करने की कोशिश कर रहा था उसके लिए यह अच्छी तरह से काम करता है और मुझे ब्राउज़र में आधारित फ़्लैश के लिए समाधान बहुत सुंदर लगता है।

function json_decode(data:String):* { 
    try { 
    return ExternalInterface.call("function(){return " + data + "}"); 
    } catch (e:Error) { 
    return null; 
    } 
} 
+1

** नोट: ** है के रूप में, यह एक बड़ा सुरक्षा भेद्यता। इसका उपयोग करना बेहतर होगा: 'बाहरी इंटरफेस.call ("फ़ंक्शन() {वापसी JSON.decode ('" + data.replace (/ (['\\])/g, "\\ $ 1"); + ");} ")' – brianreavis

+1

@brianreavis: बस 'बाहरी इंटरफेस.call (' JSON.parse ', डेटा)' इसे करना चाहिए :-) –

+0

नोट किया गया, धन्यवाद! उस समय मुझे कुछ काम करने की आवश्यकता थी और मैं डेटा स्रोत के नियंत्रण में था। एक तरफ के रूप में, यह इस प्रश्न के अनुसार मूल जेएसओएन एपीआई की कमी के कारण आईई 7 के साथ काम नहीं करेगा और कम होगा: http://stackoverflow.com/questions/4908875/is-json-parse-supported-by-all-major -ब्रोसर – Shane