簡體   English   中英

JavaScript 關聯數組到 JSON

[英]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.aAssocArray['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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM