[英]JavaScript associative array to 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
初始化您的“數組”,然后它就會成為通用對象。
同意將對象保留為對象並將數組保留為數組可能是最佳實踐。 但是,如果您有一個帶有命名屬性的對象並將其視為數組,則可以這樣做:
let tempArr = [];
Object.keys(objectArr).forEach( (element) => {
tempArr.push(objectArr[element]);
});
let json = JSON.stringify(tempArr);
我在這里發布了一個修復程序
您可以使用此函數修改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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.