Ensemble associatif JavaScript à 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: "[]" 

Les tableaux ne doivent avoir que des entrées avec des clés numériques (les tableaux sont également des objets, mais vous ne devriez pas les mélanger).

Si vous convertissez un tableau en JSON, le processus ne prend en compte que les propriétés numériques. D'autres propriétés sont simplement ignorées et c'est pourquoi vous obtenez un tableau vide en conséquence. Peut-être que cela est plus évident si vous regardez la length du tableau:

 > AssocArray.length 0 

Ce qui est souvent appelé «tableau associatif» n'est en réalité qu'un objet dans 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"}" 

Les propriétés des objets peuvent être accessibles via la notation de tableau ou la notation de points (si la clé n'est pas un mot-clé réservé). Ainsi AssocArray.a est identique à AssocArray['a'] .

Il n'y a pas de tableaux associatifs en JavaScript. Cependant, il existe des objets avec des propriétés nommées, alors n'initialisez pas votre "tableau" avec un new Array , puis il devient un objet générique.

J'ai posté un correctif pour cela ici

Vous pouvez utiliser cette fonction pour modifier JSON.stringify pour encoder des arrays , il suffit de le poster près du début de votre script (cochez 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); }; })(); 

Vous voudrez peut-être pousser l'objet dans le tableau

 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);