जावास्क्रिप्ट पाश json सरणी के माध्यम से?


151

मैं निम्नलिखित json सरणी के माध्यम से लूप करने की कोशिश कर रहा हूं:

{
  "id": "1",
  "msg": "hi",
  "tid": "2013-05-05 23:35",
  "fromWho": "hello1@email.se"
}, {
  "id": "2",
  "msg": "there",
  "tid": "2013-05-05 23:45",
  "fromWho": "hello2@email.se"
}

और निम्नलिखित की कोशिश की है

for (var key in data) {
   if (data.hasOwnProperty(key)) {
      console.log(data[key].id);
   }
}

लेकिन किसी कारण से मैं केवल पहला भाग, आईडी 1 मान प्राप्त कर रहा हूं।

कोई विचार?


क्या कुछ गुमशुदा कोष्ठक हैं? यह वास्तव में अब एक सरणी की तरह नहीं दिखता है। और क्या आपने JSON को पार्स किया?
डेनिस सेगुरेट

क्या यह वस्तुओं की एक सरणी है? (क्या आप याद कर रहे हैं [] या वे वहां नहीं हैं?)
लाइपपियोरा

9
यह न तो JSON है और न ही सरणी।
जेजे


कृपया शीर्षक बदलें, यह JSON ऑब्जेक्ट प्रॉपर्टी के माध्यम से पुनरावृति करना है, न कि कोई सरणी
Taylored Web Sites

जवाबों:


222

आपका JSON इस तरह दिखना चाहिए:

var json = [{
    "id" : "1", 
    "msg"   : "hi",
    "tid" : "2013-05-05 23:35",
    "fromWho": "hello1@email.se"
},
{
    "id" : "2", 
    "msg"   : "there",
    "tid" : "2013-05-05 23:45",
    "fromWho": "hello2@email.se"
}];

आप इस तरह से ऐरे पर लूप कर सकते हैं:

for(var i = 0; i < json.length; i++) {
    var obj = json[i];

    console.log(obj.id);
}

या इस तरह (एरिक से सुझाव दिया गया) IE समर्थन के साथ सावधान रहें

json.forEach(function(obj) { console.log(obj.id); });

11
या अधिक स्पष्ट रूप से,json.forEach(function(obj) { console.log(obj.id); });
एरिक

4
जब तक IE8 (सामान्य रूप से, सभी लेकिन IE;) पर
लाइपपियोरा

4
मुझे लगता है कि उदाहरण भ्रमित हो सकता है, क्योंकि var json एक JSON ऑब्जेक्ट नहीं है, बल्कि एक सरणी है। इस स्थिति में,। कोई भी काम नहीं करता है, लेकिन जब आप एक json ऑब्जेक्ट का उपयोग करते हैं, तो यह काम नहीं करता है।
मईलेटो

27

आपके कोड में कुछ समस्याएं हैं, पहले आपका json अवश्य दिखता है:

var json = [{
"id" : "1", 
"msg"   : "hi",
"tid" : "2013-05-05 23:35",
"fromWho": "hello1@email.se"
},
{
"id" : "2", 
"msg"   : "there",
"tid" : "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}];

अगला, आप इस तरह से पुनरावृत्त कर सकते हैं:

for (var key in json) {
if (json.hasOwnProperty(key)) {
  alert(json[key].id);
  alert(json[key].msg);
}
}

और यह सही परिणाम देता है।

यहाँ देखें फिडल: http://jsfiddle.net/zrSmp/


16
var arr = [
  {
  "id": "1",
  "msg": "hi",
  "tid": "2013-05-05 23:35",
  "fromWho": "hello1@email.se"
  }, {
  "id": "2",
  "msg": "there",
  "tid": "2013-05-05 23:45",
  "fromWho": "hello2@email.se"
  }
];

आसान कार्यान्वयन के लिए आगे की विधि।

arr.forEach(function(item){
  console.log('ID: ' + item.id);
  console.log('MSG: ' + item.msg);
  console.log('TID: ' + item.tid);
  console.log('FROMWHO: ' + item.fromWho);
});

16

इसे इस्तेमाल करे

var json = [{
    "id" : "1", 
    "msg"   : "hi",
    "tid" : "2013-05-05 23:35",
    "fromWho": "hello1@email.se"
},
{
    "id" : "2", 
    "msg"   : "there",
    "tid" : "2013-05-05 23:45",
    "fromWho": "hello2@email.se"
}];

json.forEach((item) => {
  console.log('ID: ' + item.id);
  console.log('MSG: ' + item.msg);
  console.log('TID: ' + item.tid);
  console.log('FROMWHO: ' + item.fromWho);
});

10

चूँकि मैंने पहले ही इसे देखना शुरू कर दिया था:

var data = [{
    "id": "1",
    "msg": "hi",
    "tid": "2013-05-05 23:35",
    "fromWho": "hello1@email.se"
}, {
    "id": "2",
    "msg": "there",
    "tid": "2013-05-05 23:45",
    "fromWho": "hello2@email.se"
}]

और यह समारोह

var iterateData =function(data){   for (var key in data) {
       if (data.hasOwnProperty(key)) {
          console.log(data[key].id);
       }
    }};

आप इसे इस तरह कह सकते हैं

iterateData(data); // write 1 and 2 to the console

एरिक्सन टिप्पणी के बाद अपडेट करें

जैसा कि एरिक ने बताया कि एक सरणी के लिए एक for inलूप अप्रत्याशित परिणाम हो सकता है । संदर्भित प्रश्न में पेशेवरों और विपक्षों के बारे में एक लंबी चर्चा है।

(Var i ... के लिए टेस्ट करें ...

लेकिन ऐसा लगता है कि follwing काफी बचा है:

for(var i = 0; i < array.length; i += 1)

हालांकि क्रोम में एक परीक्षण के बाद परिणाम था

var ar = [];
ar[0] = "a"; 
ar[1] = "b";
ar[4] = "c";

function forInArray(ar){ 
     for(var i = 0; i < ar.length; i += 1) 
        console.log(ar[i]);
}

// calling the function
// returns a,b, undefined, undefined, c, undefined
forInArray(ar); 

के साथ टेस्ट करें .forEach()

कम से कम क्रोम 30 में यह उम्मीद के मुताबिक काम करता है

var logAr = function(element, index, array) {
    console.log("a[" + index + "] = " + element);
}
ar.forEach(logAr); // returns a[0] = a, a[1] = b, a[4] = c

लिंक


2
-1 - for ... in लूप का उपयोग सरणियों के लिए नहीं किया जाना चाहिए
एरिक

सरणी समझ का उपयोग करें for eachfor ... in ...एक मनमाना क्रम में ऑब्जेक्ट कुंजियों की गणना के लिए एक भाषा निर्माण है। यह किसी सरणी के लिए सही निर्माण नहीं है।
एरिक

9

यह काम कर रहा है। मैंने अभी JSON डेटा में स्क्वायर ब्रैकेट जोड़े हैं। डेटा है:

var data = [
    { 
        "id": "1",
        "msg": "hi", 
        "tid": "2013-05-05 23:35", 
        "fromWho": "hello1@email.se" 
    }, 
    { 
        "id": "2", 
        "msg": "there", 
        "tid": "2013-05-05 23:45", 
        "fromWho": "hello2@email.se"
    }
]

और पाश है:

for (var key in data) {
   if (data.hasOwnProperty(key)) {
         alert(data[key].id);
   }
} 

6

यदि आप उस पर पुनरावृति करना चाहते हैं तो यह एक सरणी होनी चाहिए। आप बहुत संभावना वंचित हो रहे हैं [और ]

var x = [{
    "id": "1",
        "msg": "hi",
        "tid": "2013-05-05 23:35",
        "fromWho": "hello1@email.se"
}, {
    "id": "2",
        "msg": "there",
        "tid": "2013-05-05 23:45",
        "fromWho": "hello2@email.se"
}];

var $output = $('#output');
for(var i = 0; i < x.length; i++) {
    console.log(x[i].id);
}

इस jsfiddle को देखें: http://jsfiddle.net/lpiepiora/kN7yZ/


5

थोड़ा देर से लेकिन मुझे आशा है कि मैं दूसरों की मदद कर सकता हूं: डी

आपके जोंस को ऐसा कुछ देखने की जरूरत है, जो निकल्स ने पहले ही कहा था। और फिर यहाँ तुम जाओ:

for(var key in currentObject){
        if(currentObject.hasOwnProperty(key)) {
          console.info(key + ': ' + currentObject[key]);
        }
   }

यदि आपके पास एक बहुआयामी सरणी है, तो यह आपका कोड है:

for (var i = 0; i < multiDimensionalArray.length; i++) {
    var currentObject = multiDimensionalArray[i]
    for(var key in currentObject){
            if(currentObject.hasOwnProperty(key)) {
              console.info(key + ': ' + currentObject[key]);
            }
       }
}

3

ठीक है, सभी मैं देख सकता हूँ कि आपके पास दो JSON ऑब्जेक्ट हैं, जिन्हें अल्पविराम द्वारा अलग किया गया है। यदि वे दोनों एक सरणी ( [...]) के अंदर थे, तो यह अधिक समझ में आता है।

और, यदि वे किसी सरणी के अंदर हैं, तो आप मानक "var i = 0 ..." प्रकार के लूप के लिए मानक का उपयोग कर रहे होंगे। जैसा कि, मुझे लगता है कि यह "आईडी" "स्ट्रिंग" की संपत्ति "पुनः" प्राप्त करने की कोशिश करने जा रहा है, फिर "हाय" की "आईडी", और इसी तरह।


2

एक संक्षिप्त समाधान का उपयोग कर mapऔर एक तीर कार्य

var data = [{
  "id": "1",
  "msg": "hi",
  "tid": "2013-05-05 23:35",
  "fromWho": "hello1@email.se"
}, {
  "id": "2",
  "msg": "there",
  "tid": "2013-05-05 23:45",
  "fromWho": "hello2@email.se"
}];
data.map((item, i) => console.log('Index:', i, 'Id:', item.id));

और उन मामलों को कवर करने के लिए जब संपत्ति "id"मौजूद नहीं है filter:

var data = [{
  "id": "1",
  "msg": "hi",
  "tid": "2013-05-05 23:35",
  "fromWho": "hello1@email.se"
}, {
  "id": "2",
  "msg": "there",
  "tid": "2013-05-05 23:45",
  "fromWho": "hello2@email.se"
}, {
  "msg": "abcde",
  "tid": "2013-06-06 23:46",
  "fromWho": "hello3@email.se"
}];

data.filter(item=>item.hasOwnProperty('id'))
                .map((item, i) => console.log('Index:', i, 'Id:', item.id));


0

ओह माय ... हर कोई इसे इतना कठिन क्यों बनाता है !!?

आपके डेटा स्निपेट को थोड़ा विस्तारित करने की आवश्यकता है, और इसे इस तरह से उचित जस्सन होना चाहिए। सूचना मैं सिर्फ सरणी नाम विशेषता "आइटम" शामिल करता हूं

{"item":[
{
  "id": "1",
  "msg": "hi",
  "tid": "2013-05-05 23:35",
  "fromWho": "hello1@email.se"
}, {
  "id": "2",
  "msg": "there",
  "tid": "2013-05-05 23:45",
  "fromWho": "hello2@email.se"
}]}

आपकी जावा स्क्रिप्ट बस है

var objCount = json.item.length;
for ( var x=0; x < objCount ; xx++ ) {
    var curitem = json.item[x];
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.