如何跳过JSON数组中的不存在的对象

时间:2012-10-11 16:54:46

标签: json

我将在下面使用jQuery函数解析以下JSON消息。通过观察JSON消息可以看出,friends.data数组中的第二个对象没有任何“状态”项,但只有“name”和“id”,与主数组中的第一个和最后一个对象相反。然而,由于$ .each(friend.statuses,function(j,status)函数在第二个项目(没有任何“状态”条目)停止而没有进入下一个条目,因此我在解析整个Message时遇到问题(这个例子中的最后一个),它确实包含一个“状态”项。我尝试在$ .each(friend.statuses,function(j,status)函数之前和之后添加一些逻辑,以验证是否存在项目(“状态”),但没有成功。我怎么能“跳过”主数组中的第二个项目,以便第二个$ .each函数继续解析主数组,直到JSON消息结束。

Function:

$.each(response.friends.data, function(i, friend){
    $.each(friend.statuses, function(j, status){
        alert(status.message);
    });
});



JSON Message:

{   
    "id": "idValue",
    "friends": {
      "data": [
       {
         "name": "NameValue",
         "id": "idValue",
         "statuses": {
           "data": [
             {
               "message": "Msg1",
               "updated_time": "Date",
             },
             {
               "message": "Msg2",
               "updated_time": "Date",
             },
           ],
          }
       },

       {
         "name": "NameValue",
         "id": "idValue",
       }

       {
         "name": "NameValue",
         "id": "idValue",
         "statuses": {
           "data": [
             {
               "message": "Msg1",
               "updated_time": "Date",
             },
             {
           "message": "Msg2",
               "updated_time": "Date",
             },
           ],
         }
       }
     ],   
  }
} 

2 个答案:

答案 0 :(得分:1)

您可以filter数组:

$.each(
    response.friends.data.filter(function(){return typeof this.status!='undefined'}),
     function(i, friend){
    $.each(friend.statuses, function(j, status){
        alert(status.message);
    });
});

(如果你想与IE8兼容,请注意文档中提出的解决方案 - )

答案 1 :(得分:1)

检查当前friend对象是否具有状态,如果没有,则继续下一个朋友。您只需执行以下操作即可:if(!friend.statuses) return;

$.each(response.friends.data, function(i, friend){
    if(!friend.statuses) return;
    $.each(friend.statuses, function(j, status){
        alert(status.message);
    });
});