javascript - जावास्क्रिप्ट JSON सरणी का विश्लेषण कैसे करें




extjs (7)

फॉर-इन-लूप में चलने वाले चर में संपत्ति का नाम होता है, न कि संपत्ति मूल्य।

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);
}

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

{
"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);
 }

मैं क्या गलत कर रहा हूं ? धन्यवाद!


यह मेरा जवाब है,

<!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>

जावास्क्रिप्ट को स्ट्रिंग के लिए जेएसओएन पार्स में बनाया गया है, जो मुझे लगता है कि आपके पास क्या है:

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);
}

यहां एक कामकाजी उदाहरण है

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

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


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

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

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


सुनिश्चित नहीं है कि मेरा डेटा बिल्कुल मेल खाता है लेकिन मेरे पास JSON ऑब्जेक्ट्स के सरणी की सरणी थी, जिसे पृष्ठों का उपयोग करते समय jQuery फॉर्मबिल्डर से निर्यात किया गया था।

उम्मीद है कि मेरा जवाब किसी भी व्यक्ति की मदद कर सकता है जो इस प्रश्न पर ठोकर खा रहा है, जो कि मेरे पास एक समस्या का उत्तर ढूंढ रहा है।

डेटा कुछ हद तक इस तरह दिखता था:

var allData = 
[
    [
        {
            "type":"text",
            "label":"Text Field"
        }, 
        {
            "type":"text",
            "label":"Text Field"
        }
    ],
    [
        {
            "type":"text",
            "label":"Text Field"
        }, 
        {
            "type":"text",
            "label":"Text Field"
        }
    ]
]

मैंने इसका विश्लेषण करने के लिए क्या किया था बस निम्नलिखित करना था:

JSON.parse("["+allData.toString()+"]")

मेरे लिए बिंदु के लिए कुछ और ..

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';  
var contact = JSON.parse(jsontext);  
document.write(contact.surname + ", " + contact.firstname);  
document.write(contact.phone[1]);  
// Output:  
// Aaberg, Jesper  
// 555-0100

संदर्भ: https://docs.microsoft.com/en-us/scripting/javascript/reference/json-parse-function-javascript कार्यक्षमता- https://docs.microsoft.com/en-us/scripting/javascript/reference/json-parse-function-javascript


एक बंद एक वस्तु की तरह है। जब भी आप कोई फ़ंक्शन कॉल करते हैं तो यह तत्काल हो जाता है।

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

अगर आप बंद हो तो एक चर शामिल है

  1. इसे असाइन करें var foo=1; या
  2. बस लिखें var foo;

यदि एक आंतरिक कार्य (किसी अन्य फ़ंक्शन के अंदर एक फ़ंक्शन) भिन्नता के साथ अपने स्वयं के दायरे में परिभाषित किए बिना ऐसे चर को एक्सेस करता है, तो यह बाहरी बंद होने पर चर की सामग्री को संशोधित करता है ।

एक बंद करने से उस समारोह के रनटाइम को आगे बढ़ाया जाता है जो इसे उत्पन्न करता है। यदि अन्य कार्य इसे क्लोजर / स्कोप से बाहर करते हैं जिसमें उन्हें परिभाषित किया जाता है (उदाहरण के लिए वापसी मान के रूप में), तो वे उस बंद होने का संदर्भ जारी रखेंगे ।

उदाहरण

function example(closure) {
  // define somevariable to live in the closure of example
  var somevariable = 'unchanged';

  return {
    change_to: function(value) {
      somevariable = value;
    },
    log: function(value) {
      console.log('somevariable of closure %s is: %s',
        closure, somevariable);
    }
  }
}

closure_one = example('one');
closure_two = example('two');

closure_one.log();
closure_two.log();
closure_one.change_to('some new value');
closure_one.log();
closure_two.log();

उत्पादन

somevariable of closure one is: unchanged
somevariable of closure two is: unchanged
somevariable of closure one is: some new value
somevariable of closure two is: unchanged




javascript json extjs