2013-03-07 17 views
7

के माध्यम से Iterate मुझे जेसन सरणी ऑब्जेक्ट के माध्यम से पुनरावृत्त करना होगा।नेस्टेड जेसन ऑब्जेक्ट सरणी

इसमें निम्नलिखित संरचना है।

var myJSONObject = { 
    "abc": { 
     "prod_1": [ 
      {"prod_ver" : "prod 1 ver 1"}, 
      {"prod_ver" : "prod 1 ver 2"}, 
     ], 
     "prod_2": [ 
      {"prod_ver" : "prod 2 ver 1"}, 
      {"prod_ver" : "prod 2 ver 2"}, 
     ], 
     "prod_3": [ 
      {"prod_ver" : "prod 3 ver 1"}, 
      {"prod_ver" : "prod 3 ver 2"}, 
     ] 
    } 
}; 

असल में मैं क्या कर रहा हूँ prod_1 एक उत्पाद और संस्करण prod_1 इसके अंदर भर जाती है है की सूची के नाम पर है।

तो अब मैं जो चाहता हूं वह उत्पाद का नाम और साथ ही इसके संस्करण क्या हैं।

समस्या यह है कि उस उत्पाद के तहत कई उत्पाद और कई संस्करण हो सकते हैं। इसलिए मुझे जावास्क्रिप्ट में उचित लूपिंग संरचना की आवश्यकता है जो इसे संभालने के लिए सामान्य हो सकता है।

यह सबसे अच्छा होगा यदि लूप एक var में उत्पाद का नाम संग्रहीत करता है और इसका संस्करण किसी अन्य var में होता है क्योंकि कुछ जांच मुझे उत्पाद नाम पर करने की आवश्यकता होती है।

यदि जेसन संरचना गलत है या बेहतर जेसन संरचना लिखी जा सकती है तो कृपया सही/बेहतर संरचना का सुझाव दें।

कृपया मदद

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

+0

नहीं JSON है यही कारण है, कि एक जावास्क्रिप्ट ऑब्जेक्ट प्रारंभकर्ता

उत्तर

14

myJSONObject.abc के बाद से उत्पादों की एक सूची है जो abc को सरणी के रूप में परिभाषित करने के लिए अधिक समझदारी होगी। इस तरह:

var myJSONObject = 
{ 
"abc": 
    [ 
     [ 
      {"prod_ver" : "prod 1 ver 1"}, 
      {"prod_ver" : "prod 1 ver 2"}, 
     ], 
     [ 
      {"prod_ver" : "prod 2 ver 1"}, 
      {"prod_ver" : "prod 2 ver 2"}, 
     ], 
     [ 
      {"prod_ver" : "prod 3 ver 1"}, 
      {"prod_ver" : "prod 3 ver 2"}, 
     ] 
    ] 
}; 

तो फिर तुम उत्पादों पर पुनरावृति कर सकते हैं और उनके संस्करणों सामान्य छोरों का उपयोग कर:

for(var i = 0; i < myJSONObject.abc.length; i++) 
{ 
    var product = myJSONObject.abc[i]; 
    for(var j = 0; j < product.length; j++) 
    { 
     var version = product[j]; 
    } 
} 

आप इसे थोड़ा आगे एक सा लेने के लिए और अपने JSON ऑब्जेक्ट की संरचना बदल सकता है यह और अधिक आसानी से बनाने के लिए समझा जा सकता।

var catalog = 
{ 
    "products": [ 
     { 
      "name": "prod 1", 
      "versions": [ 
       "ver 1", 
       "ver 2" 
      ] 
     }, 
     { 
      "name": "prod 2", 
      "versions": [ 
       "ver 1", 
       "ver 2" 
      ] 
     } 
    ] 
}; 

for(var i = 0; i < catalog.products.length; i++) 
{ 
    var product = catalog.products[i]; 
    var productName = product.name; 
    for(var j = 0; j < product.versions.length; j++) 
    { 
     var version = product.versions[j]; 
    } 
} 
+0

** Thanx ** सूची वस्तु के साथ समाधान बेहतर हो रहा है है। – Saurabh

+0

महान जवाब! धन्यवाद। अगर मैं मुख्य नाम (यानी: "उत्पाद" "नाम" या "संस्करण") नहीं जानता तो मैं यह कैसे कर सकता हूं? – iSofia

+0

मैं एक नया प्रश्न बनाने और अपने डेटा का एक उदाहरण साझा करने की सलाह देता हूं, ताकि आपको बेहतर मदद मिल सके। – Korijn

6

myJSONObject.abcprod_1, prod_2, आदि जैसे कुंजी के साथ एक वस्तु आप एक वस्तु की कुंजी के माध्यम से लूप for-in का उपयोग कर सकते है। तो:

var productName; 
var productVersionArray; 

for (productName in myJSONObject.abc) { 
    productVersionArray = myJSONObject.abc[productName]; 
} 

ध्यान दें कि चाबियों का क्रम विनिर्देश द्वारा परिभाषित नहीं किया गया है और जावास्क्रिप्ट इंजन से जावास्क्रिप्ट इंजन में भिन्न होगा। यदि आप उन्हें किसी विशेष क्रम में करना चाहते हैं, तो आपको उनमें से एक सरणी प्राप्त करनी होगी, इसे क्रम में क्रमबद्ध करें, और फिर उस सरणी के माध्यम से लूप करें। (ईएस 5-सक्षम वातावरण में, आप Object.keys(yourObject) से ऑब्जेक्ट की चाबियों की एक सरणी प्राप्त कर सकते हैं। लेकिन आपको पुराने ब्राउज़र के लिए एक शिम की आवश्यकता होगी।)

उस लूप के भीतर, आप सरणी के माध्यम से सरणी के माध्यम से लूप कर सकते हैं मानक for पाश:

for (versionIndex = 0; versionIndex < productVersionArray.length; ++versionIndex) { 
    // Use `productVersionArray[versionIndex].prod_ver` here 
} 

यहाँ एक उदाहरण यह सब एक साथ डाल रहा है:

(function() { 

    var myJSONObject = 
    { 
    "abc": 
     { 
      "prod_1": 
      [ 
       {"prod_ver" : "prod 1 ver 1"}, 
       {"prod_ver" : "prod 1 ver 2"} 
      ], 

      "prod_2": 
      [ 
       {"prod_ver" : "prod 2 ver 1"}, 
       {"prod_ver" : "prod 2 ver 2"} 
      ], 
      "prod_3": 
      [ 
       {"prod_ver" : "prod 3 ver 1"}, 
       {"prod_ver" : "prod 3 ver 2"} 
      ] 
     } 
    }; 

    var productName; 
    var productVersionArray; 
    var versionIndex; 

    for (productName in myJSONObject.abc) { 
     productVersionArray = myJSONObject.abc[productName]; 
     display(productName + " has " + productVersionArray.length + " versions listed"); 
     for (versionIndex = 0; versionIndex < productVersionArray.length; ++versionIndex) { 
     display("* " + productVersionArray[versionIndex].prod_ver); 
     } 
    } 

    function display(msg) { 
    var p = document.createElement('p'); 
    p.innerHTML = String(msg); 
    document.body.appendChild(p); 
    } 

})(); 

Live Copy | Source

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