【问题标题】:How to Skip over a Non-Existing Object in a JSON Array如何跳过 JSON 数组中不存在的对象
【发布时间】:2013-12-04 18:31:57
【问题描述】:

我将使用下面的 jQuery 函数解析下面的 JSON 消息。通过观察 JSON 消息可以看出,friends.data 数组中的第二个对象没有任何“状态”项,而只有“名称”和“id”,与主数组中的第一个和最后一个对象相反。尽管如此,我在解析整个消息时遇到问题,因为 $.each(friend.statuses, function(j, status) 函数在第二个项目(没有任何“状态”条目)处停止,而没有继续到下一个项目(这个例子中的最后一个),它确实包含一个“状态”项目。我尝试在 $.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",
             },
           ],
         }
       }
     ],   
  }
} 

【问题讨论】:

    标签: json


    【解决方案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);
        });
    });
    

    【讨论】:

    • 嗨,谢谢你们的回答。我使用了 ggreiner 的答案,因为它看起来更简单直接,而且效果很好。再次感谢你们的时间。问候,JF
    【解决方案2】:

    你可以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,请注意文档中提出的解决方案-)

    【讨论】:

    • 您好,感谢您的宝贵时间和回答。问候,JF
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多