web-dev-qa-db-fra.com

Convertir un tableau associatif javascript en objet json en utilisant stringify et inversement

J'ai un tableau javascript associatif comme celui ci-dessous

 var my_cars= new Array()
 my_cars["cool"]="Mustang";
 my_cars["family"]="Station Wagon";
 my_cars["big"]="SUV";

Je veux le convertir en utilisant Stringify à l'objet json. Je veux savoir après la conversion à quoi ressemblera l’objet json.

Aussi, quand j'ai cet objet, comment je peux le reconvertir en tableau associatif.

18
user882196

Tout d'abord, en faisant my_cars un tableau et en le chaînant, vous n'obtenez pas ce que vous attendiez.

var my_cars= new Array()
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";
alert(JSON.stringify(my_cars));

Cette alerte [].

Ce que vous voulez, c'est commencer par {}:

var my_cars= {};
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";
alert(JSON.stringify(my_cars));

Cette alerte

{"cool":"Mustang","family":"Station Wagon","big":"SUV"}

Pour récupérer votre objet dans la chaîne, utilisez JSON.parse().

var s = JSON.stringify(my_cars);
var c = JSON.parse(s);
alert(c.cool);

Cette alerte "Mustang".

Voir http://jsfiddle.net/Y2De9/

47
Ray Toal

Non, mais l'utilisateur veut utiliser array pas json.

Les tableaux JavaScript normaux sont conçus pour contenir des données avec des index numériques. 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 ce qu'elles sont conçues. Le type de données du tableau JSON ne peut pas avoir de clés nommées sur un tableau.

Si vous voulez des clés nommées, utilisez un objet, pas un tableau.

* la source

var test = [];           // Object
test[0] = 'test';        //this will be stringified

Maintenant, si vous voulez une paire clé-valeur dans le tableau

test[1] = {};          // Array
test[1]['b']='item';
var json = JSON.stringify(test);

sortie 

"["test",{"b":"item"}]"

afin que vous puissiez utiliser un index avec tableau, donc alternativement 

var my_cars= [];
my_cars[0]={};
my_cars[0]["cool"]="Mustang";
my_cars[1]={};
my_cars[1]["family"]="Station Wagon";
my_cars[2]={};
my_cars[2]["big"]="SUV";
console.log(JSON.stringify(my_cars));

Sortie

"[{"cool":"Mustang"},{"family":"Station Wagon"},{"big":"SUV"}]"
4
user4023394

Déplacement de mon commentaire dans une réponse afin que je puisse vous montrer un exemple de code.

Ces types de tableaux sont non-non en javascript. Vous devriez UNIQUEMENT utiliser un objet pour des clés non numériques comme celle-ci. Les index de tableau doivent être des nombres. Les objets Javascript peuvent utiliser des valeurs arbitraires pour les clés (comme dans votre exemple). Il arrive que les tableaux "semblent" fonctionner parce que les tableaux eux-mêmes sont des objets, mais vous ne trouverez pas que les méthodes Array normales fonctionneront avec eux. Par exemple, regardez cet exemple de code.

var my_cars= new Array()
my_cars["cool"]="Mustang";
my_cars["family"]="Station Wagon";
my_cars["big"]="SUV";
alert(my_cars.length);  // alerts 0

Vous avez uniquement ajouté des propriétés à l'objet sous-jacent, pas réellement ajouté d'éléments au tableau. Vous devriez utiliser un objet pour cela, pas un tableau. Javascript n'a pas réellement de tableau associatif. Il a un objet dont les propriétés peuvent souvent être utilisées comme on utiliserait un tableau associé dans d'autres langues. Mais, c'est un objet, pas un tableau.

3
jfriend00

Si, pour une raison quelconque, vous ne pouvez pas convertir votre tableau en objet, par exemple si vous travaillez sur un gros framework ou un code hérité que vous ne voulez pas toucher et que votre travail consiste uniquement à ajouter une fonctionnalité nécessitant l'utilisation de l'API JSON, vous devez envisager d'utiliser JSON .stringify (json, fonction (k, v) {}) version de l'API . Dans la fonction, vous pouvez maintenant décider quoi faire avec la valeur de la clé est d'un type spécifique. 

0
TechMaze