如何将 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: "[]"
如何将 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
,然后它就变成了通用对象。
同意将对象保留为对象并将数组保留为数组可能是最佳实践。但是,如果您有一个带有命名属性的对象并将其视为数组,则可以这样做:
let tempArr = [];
Object.keys(objectArr).forEach( (element) => {
tempArr.push(objectArr[element]);
});
let json = JSON.stringify(tempArr);
我在这里发布了一个修复程序
您可以使用此函数修改JSON.stringify
为 encode 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);