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.a
与AssocArray['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);