11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

je me lance dans le Json et je voudrais tenter quelque chose.

Voilà le format (avec des termes génériques) de mon Json:

var panier = {
  "magasin": [
    { 
    "liste": ["auchan", "leclerc"]    
    }    
  ],
  
  "fiche": [
 	{
 	"auchan" : [
 			 	"fruit",
 				"légume",
 				"boisson"
 			]		
 	}   
   ]    
};


Dans mon html ensuite je fais ce code suivant:

<script>

var n = panier .magasin[0].liste[0];  	
var achat1 = panier .fiche[0].+n+[0];

</script>


Mais le +n+ ne fonctionne pas. Je suis obligé pour avoir "fruit de taper :

panier .fiche[0].auchan[0]

On ne peut pas faire autrement? Je sèche un peu là Smiley ohwell C'est pour m'éviter de passer par des rajouts d'Id dans tous les sens en fait.

Merci Smiley smile
Modérateur
Bonjour, tutrouveras ton bonheur avec une recherche sous "nom de variable dynamique".

plus concrètement tu peux atteindre ta variable de la sorte, grâce à eval:


  var maVar = 'maman';
  var quifaitmalessive = famille.parents.eval(maVar);


Je crois que ça peut aussi marcher de la sorte suivante, mais je ne suis plus sûr, à vérifier:

  var maVar = 'maman';
  var quifaitmalessive = famille.parents[maVar];
Non ça ne passe toujours pas Smiley ohwell

J'ai un Uncaught TypeError: Object #<Object> has no method 'eval'

je tape ça et j'ai l'erreur:

var test2 = 'auchan';
var achat1 = panier.fiche[0].eval(test2)[0];


Mais si je tape ça :

var achat1 = panier.fiche[0].auchan[0];


là c'est niquel.

Je vais fouiller avec nom de variable dynamique sur le net déjà Smiley smile merci de ta réponse en tout cas.
Hello.

Il faut utiliser la deuxième forme indiquée par kustolovic. Il ne faut JAMAIS utiliser eval. Ton code devient donc :
var store =  panier.magasin[0].liste[0],
    firstArticle = panier.fiche[0][store][0]

Au passage, quand tu utilises ce genre de syntaxe, c'est bien de s'assurer que l'élément existe bel et bien
if (panier.fiche[0][store])
Autre chose, si la syntaxe est vraiment laide, c'est parce que ton json est mal organisé, tu pourrais le simplifier par
var panier = {
	"auchan": {
		"panier": ["fruit", "legume"]
	},
	
	"leclerc": {
		"panier": ["biere", "chips", "pizza"]
	}
}

Modifié par Florian_R (13 Mar 2012 - 16:28)
Merci ça fonctionne super bien comme ça.

Pour le format Json avec ce qui est écrit c'est pas propre certe mais c'est parce que je vais devoir couper en plusieurs fichier. Le client veut un truc un peu bizarre et le client est roi...

Merci encore en tout cas, super Smiley smile