【问题标题】:Checking if an element exists in json检查json中是否存在元素
【发布时间】:2011-09-26 17:59:33
【问题描述】:

使用以下提要:

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或undefined,我只是得到以下错误:

cannot read property 'user' of undefined

【问题讨论】:

  • if (data[i].retweeted_status && data[i].retweeted_status.user && data[i].retweeted_status.user.profile_image_url)
  • @Abhijit,请将其添加为答案。

标签: javascript json jquery jsonp


【解决方案1】:

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

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

【讨论】:

  • 如果推文是转推,我想获取 REtweeted_status.user.profile_image_url,而不是 user.profile_image_url。它们是 2 个不同的元素。请查看我在上面发布的 json 链接。
【解决方案2】:

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

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 上的属性是否存在。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      你可以做的另一件事对我有用:

      if(retweeted_status) {
        // your code
      }
      

      【讨论】:

        【解决方案5】:

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

        if('key' in myObj)
        

        【讨论】:

        • 从 json 的角度来看,我更喜欢这个答案,因为键可能在值为 undefined 的对象中。
        【解决方案6】:
        if (something !== undefined) {
           ...
        }
        

        ...甚至更好:

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

        【讨论】:

        • 这是一个全面的答案,但请考虑将最佳选项放在首位,次佳放在第二位,并解释原因。
        猜你喜欢
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 2021-05-04
        相关资源
        最近更新 更多