81 votes

Tableau associatif JavaScript vers JSON

Comment puis-je convertir un tableau associatif JavaScript en JSON?

J'ai essayé ce qui suit:

 var AssocArray = new Array();

AssocArray["a"] = "The letter A"

console.log("a = " + AssocArray["a"]);

// result: "a = The letter A"

JSON.stringify(AssocArray);

// result: "[]"
 

148voto

Felix Kling Points 247451

Les tableaux ne devrait avoir que des entrées avec les touches numériques (tableaux sont aussi des objets mais vous ne devez pas mélanger ces).

Si vous convertissez un tableau JSON, le processus ne prendra numérique en compte les propriétés. D'autres propriétés sont tout simplement ignorés et c'est pourquoi vous obtenez un tableau vide.

Ce qui est souvent appelé "tableau associatif" n'est en fait qu'un objet en JS:

var AssocArray = {};  // <- initialize an object, not an array

AssocArray["a"] = "The letter A"

console.log("a = " + AssocArray["a"]);

// result: "a = The letter A"

JSON.stringify(AssocArray);

// result: "{"a":"The letter A"}"

Les propriétés des objets sont accessibles via la matrice de notation ou à notation par points (si la clé n'est pas un mot réservé). Ainsi, AssocArray.a est le même que AssocArray['a'].

8voto

AndreKR Points 12941

Il n’y a aucun des tableaux associatifs en JavaScript. Cependant, il existe des objets avec des propriétés nommées, si juste ne pas initialiser votre « tableau » avec `` , puis il devient un objet générique.

2voto

JVE999 Points 593

J'ai posté un correctif pour cela ici

Vous pouvez utiliser cette fonction pour modifier JSON.stringify afin de coder arrays , postez-le simplement au début de votre script (consultez le lien ci-dessus pour plus de détails):

 // 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);
    };
})();
 

-1voto

Yene Mulatu Points 640

Vous pourriez vouloir pousser l’objet dans le tableau

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X