11
votes

Vérification si un élément existe dans JSON

Utilisation de l'alimentation suivante:

http://api.twitter.com/1/status/user_timeline .json? Screen_Name = Microsoft & Inclure_RTS = 1 & Count = 10

Je suis capable de boucler avec succès pour obtenir les détails que je souhaite afficher sur ma page HTML.

Cependant, je dois vérifier si resweeted_status.user.profile_image_url existe, et je ne sais pas comment faire ça?

actuellement, je suis en boucle via les données où données est renvoyé par jQuery-ajax:

data [i] .retweeted_status.user.profile_image_url

si data [i] .retweeted_status.user.profile_image_url n'existe pas, il ne renvoie pas NULL ou non défini, je viens d'obtenir l'erreur suivante:

ne peut pas lire la propriété 'utilisateur' de indéfini


2 commentaires

Si (données [i] .retweeted_status && data [i] .retweeted_status.user && data [i] .retweeted_status.user.profile_image_url)


@Abhijit, veuillez ajouter ceci comme une réponse.


6 Réponses :


29
votes

Ce message d'erreur suggère que vos données [i] ou votre resweeted_status sont indéfinies, ce qui signifie que votre appel à obtenir le JSON a probablement échoué. Lorsque les données sont renvoyées de Twitter, il sera éliminé une URL de l'image de profil, car elles montrent une image semblable à des œufs pour ceux qui n'ont aucun téléchargé. Vous devez la mettre avant votre boucle:

if (typeof(retweeted_status) != "undefined")
{
//code for what to do with json here
}


1 commentaires

Si le tweet est un retweet, Je veux obtenir le REtweeted_status.user.profile_image_url, pas le user.profile_image_url. Ils sont 2 éléments différents. S'il vous plaît examiner le lien JSON I posté ci-dessus.



0
votes

Si vous bouclez et accédez à des objets de nidification: xxx

Cette boucle n'a plus besoin d'utiliser des index de tableau, ce qui n'est pas le plus efficace que si vous avez spécifiquement besoin de l'index de quelque chose. Au lieu de cela, il apparaît le premier élément de la matrice et utilise directement cet objet. Les internes en boucle peuvent ensuite vérifier l'existence d'une propriété sur tweet_data .

J'essaie d'éviter d'utiliser plus de 1 niveau de déséroférance pour 2 raisons (comme obja.child .property ): 1) Vous pouvez vérifier l'existence d'un objet à partir du début et si cela n'existe pas, sortez ou attribuez des valeurs par défaut. 2) Chaque fois que JavaScript a besoin d'accéder à la méthode Propriété , il doit d'abord trouver enfant avec obja , puis accéder à propriété . Pourrait être lent dans de grandes boucles.


0 commentaires

0
votes

Jetez un coup d'œil à $ .grep () . Cela vous aide à boucler les objets JSON. Je l'ai utilisé sur le lien que vous avez fourni. Je l'ai utilisé pour boucler les tweets et trouver les images utilisateur retweeté. Vous pouvez regarder mon code ici: http://jsfiddle.net/q5squ/7/


0 commentaires

0
votes

Une autre chose que vous pouvez faire, ce qui a fonctionné pour moi: xxx


0 commentaires

11
votes

Je pense que c'est une bonne réponse: xxx


1 commentaires

J'aime mieux cette réponse d'une perspective JSON puisque la clé pourrait être dans l'objet avec une valeur non définie.



1
votes
if (typeof something != "undefined") {
    ...
}

1 commentaires

C'est une réponse approfondie, mais envisagez de mettre la meilleure option d'abord, le deuxième meilleur second, et expliquez pourquoi.