1

以下のjQuery関数を使用して、以下のJSONメッセージを解析しています。JSON メッセージを観察するとわかるように、friends.data 配列の 2 番目のオブジェクトには「statuses」アイテムがなく、メイン配列の最初と最後のオブジェクトとは異なり、「name」と「id」のみがあります。それにもかかわらず、 $.each(friend.statuses, function(j, status) 関数は次のアイテムに進まずに 2​​ 番目のアイテム (「ステータス」エントリがない) で停止するため、メッセージ全体の解析に問題があります ( $.each(friend.statuses, function(j, status) 関数の前後にいくつかのロジックを追加して、既存のアイテム (「ステータス」) ですが、成功しませんでした。どうすれば、メイン配列のこの 2 番目のアイテムを「スキップ」して、2 番目の $.

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 に答える