使用以下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
答案 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
}