JavaScript关联数组到JSON

如何将JavaScript关联数组转换为JSON?

我已经尝试了以下内容:

var AssocArray = new Array(); AssocArray["a"] = "The letter A" console.log("a = " + AssocArray["a"]); // result: "a = The letter A" JSON.stringify(AssocArray); // result: "[]" 

数组应该只有数字键的条目(数组也是对象,但你真的不应该混合这些)。

如果您将数组转换为JSON,则该过程将仅考虑数字属性。 其他属性被忽略,这就是为什么你得到一个空数组作为结果。 也许这更明显,如果你看看数组的length

 > AssocArray.length 0 

通常所说的“关联数组”实际上只是JS中的一个对象:

 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']

JavaScript中没有关联数组。 然而,有一些具有命名属性的对象,所以只是不要用new Array初始化你的“数组”,那么它就成为一个通用的对象。

我在这里发布了一个修复

你可以使用这个函数来修改JSON.stringify来对arrays进行编码,只要将它贴在脚本的开头就可以了(更多细节请查看上面的链接):

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

您可能想将对象推入数组中

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