IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[JSON] Vérifier si une propriété existe


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut [JSON] Vérifier si une propriété existe
    Bonjour à tous,

    J'ai un Objet JSON qui est crée par le serveur et sur lequel je veux accéder à des propriétés.
    Pur cela, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var value = eval("MYJson."+strPropertyName);
    Ceci marche bien sauf lorsque "strPropertyName" correspond à une propriété qui n'existe pas. Je reçois alors un message qui indique que la propriété n'existe pas.
    Par exemple si je veux accéder à la propriété "age" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var property = "age";
    var age = eval("MYJson."+age);
    Et la console firebug me donne :
    "MyJson.help is undefined
    Or je veux éviter ce genre de chose et retourner une chaine par defaut "[NOT FOUND]". Comment faire pour vérifier si la propriété existe avant de l'accéder via eval ?

    Merci

  2. #2
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Bonjour,

    l'utilisation de la fonction eval est totalement inutile. On peut accéder au propriétés d'un objet JSON comme s'il s'agit d'un tableau.

    Petit bout de code réalisant ce que vous souhaitez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var json = { left: 1, right: 2};
    //
    var property = "left";
    alert(json[property] || "[NOT FOUND]");
    //
    property = "undef";
    alert(json[property] || "[NOT FOUND]");
    //
    alert(json.right);
    alert(json.undef || "[NOT FOUND]");
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci mais je suis obligé d'utiliser eval.

    En fait l'objet JSOn reçu par le serveur contient un méthode par laquelle je dois passer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Je n'ai pas le code sousla main il peut y avoir quelques erreurs de syntaxe 
    var MYJson = { 
      getProperty(String propertyName) : function {
           var property = eval("MYJSon."+propertyName);
           return property;
      }
    }
    Tout celà fonctionen bein sauf si l'objet ne contient pas le propriété..

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Je ne comprend pas pourquoi ceci ne fonctionnerait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Je n'ai pas le code sousla main il peut y avoir quelques erreurs de syntaxe 
    var MYJson = { 
      getProperty(String propertyName) : function {
           var property = this[propertyName] || "[NOT FOUND]";
           return property;
      }
    }
    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Par défaut
    encore un problème de lecture de propriété créer dynamiquement, y a pas mal d'exemple sur le site

    en effet le eval n'est pas nécessaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var MYJson = { 
      getProperty : function (property){
           var property = MYJSon[property];
           return property;
      }
    }
    ce qui revient au même que Arnaud F.

    ca marche comme ca aussi en php pour appelé des class dynamiquement ....

    bye

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ca ne marche pas chez moi.. Mais mes noms de propriétés contiennent des points, c'est peut-être bien la cause..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    var Tsl = {
    	debug : true,
    "help" : {"display_date_chooser" : "Affiche un calendrier" },
    translate : function(strWhat, tabArgs) {
    		//var value = eval("Tsl."+strWhat);
    		var value = Tsl[strWhat];// || '???'+strWhat+'???';
    		if ( !value && Tsl.debug ) {
    			throw 'Undefined translation for key "'+strWhat+'".';
    		} else if ( !value && Ttsl.debug ) {
    			return '???'+strWhat+'???';
    		}
    		if ( !tabArgs )
    			return value;
    		for (i=0; i<tabArgs.length; i++) {
    			var pattern = "{"+i+"}";
    			value = value.replace(pattern, tabArgs[i]);
    		}
    		return value;
    	}
    };
    Merci

  7. #7
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Attention, il y a une condition erronée dans la propriété translate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( !value && Tsl.debug ) {
    	throw 'Undefined translation for key "'+strWhat+'".';
    } else if ( !value && Ttsl.debug ) {
    	return '???'+strWhat+'???';
    }
    Ttsl.debug (dans le else if) n'existe pas, de plus les conditions du if / else if sont identiques
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

Discussions similaires

  1. Peut-on vérifier si une page existe
    Par revline dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/04/2007, 08h53
  2. Vérifier si une image existe
    Par kevinf dans le forum Langage
    Réponses: 5
    Dernier message: 20/02/2007, 11h21
  3. Vérifier qu'une variable existe
    Par Phenomenium dans le forum ASP
    Réponses: 1
    Dernier message: 05/10/2006, 15h00
  4. vérifier si une ligne existe, et lister les champs
    Par AIexis dans le forum Débuter
    Réponses: 15
    Dernier message: 27/12/2005, 21h06
  5. Oracle 9i : Vérifier qu'une ligne existe
    Par Fatah93 dans le forum Oracle
    Réponses: 4
    Dernier message: 14/06/2005, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo