2011-09-28 3 views
1

J'ai un objet JSON je récupérer à partir d'un serveur, parfois son très simple comme:Javascript - ne peut pas déterminer si l'objet JSON contient vrai

{ "urls": ["http://google.com", "http://bing.com"] } 

Cependant, je dois vérifier si urls['tasks']['ipv6'] contient vrai , le code que je utilise est:

if (urls['tasks']['ipv6'] === true) { 
    console.log('true'); 
} 

Mais parce que urls [ 'tâches'] n'existe pas que je reçois l'erreur suivante:

Uncaught TypeError: Cannot read property 'ipv6' of undefined 

Existe-t-il un moyen facile de faire cela? J'ai vraiment du mal à trouver une solution en ligne. J'ai aussi essayé $ .isEmptyObject de jQuery et serais content d'une solution basée sur jQuery. Pour référence, j'utilise ce code dans node.js.

Répondre

4

Cela devrait faire l'affaire pour vous.

if (urls["tasks"] && urls["tasks"]["ipv6"] && urls["tasks"]["ipv6"] === true) 
{ 
    ... 
} 

Vous pouvez ajouter urls vérifier à gauche et si vous avez besoin et vous pouvez omettre le contrôle du milieu urls["tasks"]["ipv6"], parce que si elle est undefined il est certainement pas true. Le fait est que vous devez d'abord vérifier si les propriétés de niveau supérieur existent avant de forer vers le bas. Et depuis Javascript (ainsi que la majorité des langues d'aujourd'hui) n'utilise pas l'évolution booléenne complète cela fonctionne.

+2

Je pense que le milieu 'urls [ "tâches"] [ "ipv6"]' test est inutile. FWIW, ce que vous appelez * l'évolution booléenne complète * est aussi appelé * évaluation de court-circuit *. –

+0

@FelixKling: J'ai édité ma réponse pour inclure cette information. Merci. –

+0

@FelixKling: * L'évaluation de court-circuit * est en fait l'opposé de l'autre terme qui a été utilisé comme un commutateur de compilation dans Turbo Pascal il y a des années ... :) Mais vous avez raison, c'est à peu près le même paradigme. –

0
if (urls && urls["tasks"] && urls["tasks"]["ipv6"] === true) { 
    console.log("true"); 
} 
0

vérifier la typeof avant de vérifier vrai ou faux ...

 

if(typeof(urls['tasks']) != "undefined") 
{ 
    if(typeof(urls['tasks']['ipv6']) != "undefined") 
    { 
     if(urls['tasks']['ipv6'] === true) 
     { 
      console.log("I am true & I exist"); 
     } 
    } 
} 
 
+0

* légèrement * verbeux mais toujours invalide ... '" undefined "' devrait être des littéraux pas des chaînes ... ou utiliser 'typeof' opérateur qui retourne les chaînes ... –

Questions connexes