检查json中是否存在元素

时间:2011-07-01 12:47:45

标签: javascript json jquery jsonp

使用以下Feed:

http://api.twitter.com/1/statuses/user_timeline.json?screen_name=microsoft&include_rts=1&count=10

我已成功完成此操作以获取我想在html页面上显示的详细信息。

但是,我需要检查retweeted_status.user.profile_image_url是否存在,我不知道该怎么做?

目前我正在遍历jquery-ajax返回data的数据:

data[i].retweeted_status.user.profile_image_url

如果data[i].retweeted_status.user.profile_image_url不存在,则不返回null或未定义,我只是得到以下错误:

cannot read property 'user' of undefined

6 个答案:

答案 0 :(得分:28)

该错误消息表明您的data [i]或者您的retweeted_status未定义,这意味着您获取json的调用很可能失败。当从Twitter返回数据时,它将会有一个配置文件图像网址,因为它们显示了那些没有上传的人的蛋形图像。你应该把它放在你的for循环之前:

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

答案 1 :(得分:9)

我认为这是一个很好的答案:

if('key' in myObj)

答案 2 :(得分:1)

if (something !== undefined) {
   ...
}

......甚至更好:

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

答案 3 :(得分:0)

如果您正在循环并访问嵌套对象:

if(!data)
    return;

while(data.length)
{
    var tweet_data = data.shift();

    /* do some work */

    if(!tweet_data|| !tweet_data.retweeted_status)
        continue;

    var retweeted_status = tweet_data.retweeted_status;

    /* do your other work */
}

这个循环不再需要使用数组索引,除非你特别需要某个索引,否则这不是最有效的。相反,它会弹出数组中的第一个元素并直接使用该对象。然后,循环内部可以检查tweet_data上是否存在属性。

我尝试避免使用超过1级的解除引用,原因有两个(例如objA.child.property): 1)您可以从一开始就检查对象是否存在,如果它不存在,则跳出或指定默认值。 2)每次JavaScript需要访问方法property时,首先必须找到child objA,然后访问property。在大循环中可能会很慢。

答案 4 :(得分:0)

看看$.grep()。它可以帮助您遍历JSON对象。我在你提供的链接上使用它。我用它来遍历推文并找到转发的用户图像。您可以在这里查看我的代码: http://jsfiddle.net/q5sqU/7/

答案 5 :(得分:0)

你能做的另一件事,对我有用:

if(retweeted_status) {
  // your code
}