如何将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: "[]"
Answers:
数组只能包含带有数字键的条目(数组也是对象,但您实际上不应该将它们混合使用)。
如果将数组转换为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']
。
{}
new Object()
[]
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);
Json.stringify
忽略数组的非数组属性。