Il me manque quelque chose ici, mais le code suivant ( Fiddle ) renvoie une chaîne vide:
var test = new Array();
test['a'] = 'test';
test['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);
Quelle est la bonne façon de faire JSON ce tableau?
Les tableaux JavaScript normaux sont conçus pour contenir des données avec numeric index. Vous pouvez y insérer des clés nommées (ce qui peut être utile lorsque vous souhaitez stocker des métadonnées sur un tableau contenant des données normales, ordonnées et indexées numériquement), mais ce n'est pas pour cela qu'elles sont conçues. Le type de données du tableau JSON ne peut pas avoir les clés nommées sur un tableau.
Si vous voulez des clés nommées, utilisez un objet, pas un tableau.
var test = {}; // Object
test['a'] = 'test';
test['b'] = []; // Array
test['b'].Push('item');
test['b'].Push('item2');
test['b'].Push('item3');
var json = JSON.stringify(test);
alert(json);
Belle explication et exemple ci-dessus. J'ai trouvé ce ( JSON.stringify () tableau bizarreness avec Prototype.js ) pour compléter la réponse. Certains sites implémentent leur propre toJSON avec JSONFilters, supprimez-le.
if(window.Prototype) {
delete Object.prototype.toJSON;
delete Array.prototype.toJSON;
delete Hash.prototype.toJSON;
delete String.prototype.toJSON;
}
cela fonctionne bien et la sortie du test:
console.log(json);
Résultat:
"{"a":"test","b":["item","item2","item3"]}"
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);
};
})();
Sinon, vous pouvez utiliser comme ça
var test = new Array();
test[0]={};
test[0]['a'] = 'test';
test[1]={};
test[1]['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);
Comme ceci, vous JSON-ing un tableau.