2010-12-13 14 views
63

पर जावास्क्रिप्ट एसोसिएटिव सरणी मैं जावास्क्रिप्ट एसोसिएटिव सरणी को JSON में कैसे परिवर्तित कर सकता हूं?जेएसओएन

var AssocArray = new Array(); 

AssocArray["a"] = "The letter A" 

console.log("a = " + AssocArray["a"]); 

// result: "a = The letter A" 

JSON.stringify(AssocArray); 

// result: "[]" 

उत्तर

119

सरणी केवल संख्यात्मक कुंजियों (सरणियों भी कर रहे हैं वस्तुओं, लेकिन आप वास्तव में इन मिश्रण नहीं होना चाहिए) के साथ प्रविष्टियों होना चाहिए:

मैं निम्नलिखित की कोशिश की है।

यदि आप किसी सरणी को JSON में परिवर्तित करते हैं, तो प्रक्रिया केवल संख्यात्मक गुणों को ध्यान में रखेगी। अन्य गुणों को आसानी से अनदेखा कर दिया जाता है और यही कारण है कि आप परिणामस्वरूप एक खाली सरणी प्राप्त करते हैं। हो सकता है कि यह और अधिक स्पष्ट आप सरणी के length देखो अगर:

> AssocArray.length 
0 

क्या अक्सर "साहचर्य सरणी" कहा जाता है वास्तव में सिर्फ जे एस में एक वस्तु है: वस्तुओं की

var AssocArray = {}; // <- initialize an object, not an array 
AssocArray["a"] = "The letter A" 

console.log("a = " + AssocArray["a"]); // "a = The letter A" 
JSON.stringify(AssocArray); // "{"a":"The letter A"}" 

गुण कर सकते हैं सरणी नोटेशन या डॉट नोटेशन के माध्यम से पहुंचा जा सकता है (यदि कुंजी आरक्षित कीवर्ड नहीं है)। इस प्रकार AssocArray.aAssocArray['a'] जैसा ही है।

+3

गलत; सरणी भी वस्तुएं हैं। 'Json.stringify' सरणी के गैर-सरणी गुणों को अनदेखा करता है। – SLaks

+8

@ स्लक्स: मैंने कभी नहीं कहा कि सरणी ऑब्जेक्ट्स नहीं हैं;) मैं बस इतना कह रहा हूं कि कोई भी सरणी को एसोसिएटिव सरणी के रूप में उपयोग नहीं कर सकता है (ठीक है शायद कोई * * * * * ऑब्जेक्ट्स हो सकता है, लेकिन मुझे लगता है कि यह वास्तव में बदसूरत हो जाता है और उलझन में और अंत में आप ब्रह्मांड के पतन के लिए जिम्मेदार हैं ...)। –

+8

बस उत्तर को स्पष्ट करने के लिए: जब आप इसे निष्क्रिय करते हैं तो '{}' या 'नया ऑब्जेक्ट()', ** नहीं ** '[]' या 'नया ऐरे()' – Thymine

7

जावास्क्रिप्ट में कोई सहयोगी सरणी नहीं है। हालांकि, नामित गुणों वाले ऑब्जेक्ट्स हैं, इसलिए बस अपने "सरणी" को new Array के साथ प्रारंभ न करें, फिर यह एक सामान्य वस्तु बन जाता है।

+0

इस के लिए धन्यवाद, सरल और प्रभावी! – Astravagrant

-1

आप सरणी में वस्तु पुश करने के लिए

enter code here 

var AssocArray = new Array(); 

AssocArray.push("The letter A"); 

console.log("a = " + AssocArray[0]); 

// result: "a = The letter A" 

console.log(AssocArray[0]); 

JSON.stringify(AssocArray); 
+0

इसका कौन सा हिस्सा एक सहयोगी सरणी को परिभाषित करता है? – GreensterRox

0

मैं इस here

के लिए एक ठीक आप arrays एन्कोड करने के लिए JSON.stringify संशोधित करने के लिए इस सुविधा का उपयोग कर सकते हैं तैनात चाहते हो सकता है, तो बस एक शुरुआत के पास इसे पोस्ट अपनी स्क्रिप्ट का (अधिक विस्तार के लिए उपरोक्त लिंक देखें):

// Upgrade for JSON.stringify, updated to allow arrays 
(function(){ 
    // Convert array to object 
    var convArrToObj = function(array){ 
     var thisEleObj = new Object(); 
     if(typeof array == "object"){ 
      for(var i in array){ 
       var thisEle = convArrToObj(array[i]); 
       thisEleObj[i] = thisEle; 
      } 
     }else { 
      thisEleObj = array; 
     } 
     return thisEleObj; 
    }; 
    var oldJSONStringify = JSON.stringify; 
    JSON.stringify = function(input){ 
     if(oldJSONStringify(input) == '[]') 
      return oldJSONStringify(convArrToObj(input)); 
     else 
      return oldJSONStringify(input); 
    }; 
})(); 
2

सहमत हैं कि यह शायद सबसे अच्छा पीआर है ऑब्जेक्ट्स को ऑब्जेक्ट्स के रूप में ऑब्जेक्ट्स और एरेज़ के रूप में रखने के लिए कार्य करें। हालांकि, यदि आपके पास नामांकित गुणों वाला ऑब्जेक्ट है जिसका आप एक सरणी के रूप में व्यवहार कर रहे हैं, तो यह है कि यह कैसे किया जा सकता है:

let tempArr = []; 
Object.keys(objectArr).forEach((element) => { 
    tempArr.push(objectArr[element]); 
}); 

let json = JSON.stringify(tempArr); 
संबंधित मुद्दे