2012-04-03 11 views
56

का विश्लेषण कैसे करें मैं सर्वर से JSON संदेश प्राप्त करने के लिए सेन्चा टच (ExtJS) का उपयोग कर रहा हूं। संदेश मैं प्राप्त इस एक है:जावास्क्रिप्ट JSON सरणी

{ 
"success": true, 
"counters": [ 
    { 
     "counter_name": "dsd", 
     "counter_type": "sds", 
     "counter_unit": "sds" 
    }, 
    { 
     "counter_name": "gdg", 
     "counter_type": "dfd", 
     "counter_unit": "ds" 
    }, 
    { 
     "counter_name": "sdsData", 
     "counter_type": "sds", 
     "counter_unit": " dd  " 
    }, 
    { 
     "counter_name": "Stoc final", 
     "counter_type": "number ", 
     "counter_unit": "litri  " 
    }, 
    { 
     "counter_name": "Consum GPL", 
     "counter_type": "number ", 
     "counter_unit": "litri  " 
    }, 
    { 
     "counter_name": "sdg", 
     "counter_type": "dfg", 
     "counter_unit": "gfgd" 
    }, 
    { 
     "counter_name": "dfgd", 
     "counter_type": "fgf", 
     "counter_unit": "liggtggggri  " 
    }, 
    { 
     "counter_name": "fgd", 
     "counter_type": "dfg", 
     "counter_unit": "kwfgf  " 
    }, 
    { 
     "counter_name": "dfg", 
     "counter_type": "dfg", 
     "counter_unit": "dg" 
    }, 
    { 
     "counter_name": "gd", 
     "counter_type": "dfg", 
     "counter_unit": "dfg" 
    } 

    ] 
} 

मेरे समस्या यह है कि मैं इस JSON ऑब्जेक्ट पार्स नहीं कर सकता है, ताकि मैं काउंटर वस्तुओं में से प्रत्येक का उपयोग कर सकते है।

var jsonData = Ext.util.JSON.decode(myMessage); 
for (var counter in jsonData.counters) { 
    console.log(counter.counter_name); 
} 

मैं गलत क्या कर रहा हूँ:

मुझे लगता है कि इस तरह से पूरा करने के लिए कोशिश कर रहा हूँ? धन्यवाद!

var myObject = JSON.parse("my json string"); 

अपने उदाहरण के साथ इस का उपयोग करने के होगा::

var jsonData = JSON.parse(myMessage); 
for (var i = 0; i < jsonData.counters.length; i++) { 
    var counter = jsonData.counters[i]; 
    console.log(counter.counter_name); 
} 

Here is a working example

+1

[संभावित रूप से किसी ऑब्जेक्ट में JSON स्ट्रिंग को मोड़ने का संभावित डुप्लिकेट] (https://stackoverflow.com/questions/45015/safely-turning-a-json-string-into-an-object) –

उत्तर

88

जावास्क्रिप्ट एक तार है, जो मुझे लगता है कि के लिए JSON पार्स में बनाया गया है कि तुम क्या है EDIT: लूप के आपके उपयोग में एक गलती है (मैंने इसे अपने पहले पढ़ने पर याद किया, स्पॉट के लिए @Evert पर क्रेडिट)। फॉर-इन लूप का उपयोग करके var को वर्तमान लूप का प्रॉपर्टी नाम माना जाएगा, न कि वास्तविक डेटा। सही उपयोग

महत्वपूर्ण के लिए ऊपर मेरी अद्यतन पाश देखें: JSON.parse विधि अभ्यस्त वर्ष पुराने ब्राउज़रों में काम करते हैं - इसलिए यदि आप इंटरनेट कनेक्शन झुकने समय किसी प्रकार के माध्यम से अपनी वेबसाइट की कोई योजना है, यह एक समस्या हो सकती है! यदि आप वास्तव में रुचि रखते हैं, here is a support chart (जो मेरे सभी बक्से लगाता है)।

+1

यदि वह किसी का उपयोग करता है पुस्तकालय जो एक क्रॉस-ब्राउज़र parseJSON फ़ंक्शन का समर्थन करता है, उसे इसका उपयोग करना चाहिए। इसके अलावा, आप लूप गलती दोहराते हैं। – Bergi

+0

धन्यवाद @ musefan। एक आकर्षण की तरह काम किया – maephisto

+0

जब मैं इसे चलाता हूं तो मुझे पहली पंक्ति में त्रुटि मिलती है: अनकही सिंटेक्स त्रुटि: अप्रत्याशित टोकन ओ – nights

4

में एक चल चर के लिए-इन-लूप प्रॉपर्टी का नाम, नहीं संपत्ति के मूल्य रखती है।

for (var counter in jsonData.counters) { 
    console.log(jsonData.counters[counter].counter_name); 
} 

लेकिन काउंटर के रूप में एक सरणी है, तो आप के लिए लूप एक सामान्य उपयोग करने के लिए:

for (var i=0; i<jsonData.counters.length; i++) { 
    var counter = jsonData.counters[i]; 
    console.log(counter.counter_name); 
} 
0

आप एक डेटा स्टोर और ExtJs में प्रॉक्सी का उपयोग करना चाहिए। इसमें से examples बहुत सारे हैं, और JSON रीडर स्वचालित रूप से आपके द्वारा निर्दिष्ट मॉडल में JSON संदेश को पार्स करता है।

बुनियादी जावास्क्रिप्ट का उपयोग करने की कोई जरूरत जब ExtJs का उपयोग कर, सब कुछ अलग है, आप सब कुछ ठीक पाने के लिए ExtJs तरीके का उपयोग करना चाहिए। वहां दस्तावेज़ों को ध्यान से पढ़ें, यह अच्छा है।

वैसे, इन उदाहरणों भी Sencha टच (विशेष रूप से v2), जो ExtJs रूप में एक ही प्रमुख कार्यों पर आधारित है के लिए पकड़।

2

यह मेरा जवाब है, मेरे लिए

<!DOCTYPE html> 
<html> 
<body> 
<h2>Create Object from JSON String</h2> 
<p> 
First Name: <span id="fname"></span><br> 
Last Name: <span id="lname"></span><br> 
</p> 
<script> 
var txt = '{"employees":[' + 
'{"firstName":"John","lastName":"Doe" },' + 
'{"firstName":"Anna","lastName":"Smith" },' + 
'{"firstName":"Peter","lastName":"Jones" }]}'; 

//var jsonData = eval ("(" + txt + ")"); 
var jsonData = JSON.parse(txt); 
for (var i = 0; i < jsonData.employees.length; i++) { 
    var counter = jsonData.employees[i]; 
    //console.log(counter.counter_name); 
    alert(counter.firstName); 
} 

</script> 
</body> 
</html> 
+2

संदर्भ W3 स्कूल। http://www.w3schools.com/json/json_syntax.asp –

1

"Sencha रास्ता" सर्वर डेटा के साथ बातचीत के लिए एक Ext.data.reader.Json (JSON एन्कोड डेटा के लिए, देखते हैं अन्य उपलब्ध पाठकों के साथ सुसज्जित है (इस मामले Ext.data.proxy.Ajax में) एक Ext.data.Store एक Ext.data.proxy.Proxy द्वारा प्रॉक्सी स्थापित कर रही है भी)। सर्वर पर डेटा लिखने के लिए कई प्रकार के Ext.data.writer.Writer एस हैं।

var store = Ext.create('Ext.data.Store', { 
     fields: [ 
      'counter_name', 
      'counter_type', 
      'counter_unit' 
     ], 

     proxy: { 
      type: 'ajax', 
      url: 'data1.json', 

      reader: { 
       type: 'json', 
       idProperty: 'counter_name', 
       rootProperty: 'counters' 
      } 
     } 
    }); 

इस उदाहरण (this fiddle में भी उपलब्ध है) में data1.json शब्दशः अपने डेटा शामिल हैं:

यहाँ ऐसे ही एक सेटअप का एक उदाहरण है। इस मामले में idProperty: 'counter_name' शायद वैकल्पिक है लेकिन आमतौर पर प्राथमिक कुंजी विशेषता पर इंगित करता है। rootProperty: 'counters' निर्दिष्ट करता है कि किस संपत्ति में डेटा आइटम की सरणी है।

एक स्टोर सेटअप के साथ आप store.load() पर कॉल करके सर्वर से डेटा को फिर से पढ़ सकते हैं। आप स्टोर को किसी भी सेन्चा टच के उपयुक्त यूआई घटकों जैसे ग्रिड, सूचियों या रूपों में भी तार कर सकते हैं।

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