1

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

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",
             },
           ],
         }
       }
     ],   
  }
} 
4

2 回答 2

1

您可以过滤数组:

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

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

于 2012-10-11T16:58:01.147 回答
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);
    });
});
于 2012-10-11T16:58:16.327 回答