2013-07-14 121 views
0

在下面的數據示例中,我試圖循環並從participants部分獲取al數據。訪問循環json數據(Ajax)

通過ajax調用,我可以像下面那樣訪問其他數據,但是我找不到這個數據的for語句。

var userData = $.ajax({ 
    type: "POST", 
    url: userurl, 
    dataType: "json", 
    //data: { point: point, claimId: id, type: val,follow: followuser } 
    }) 
    .success(function(json) { 
     $.each(json.data, function(i,x){ 
     var id = x.Claim.user_id; // ETC 
        ... 

This works great。使用這種格式,我可以像這樣訪問單個數據:x.participants[8].user_id。例如,我無法弄清楚如何循環participants來抓取所有參與者的user_id。

{ 
"data": [ 
    { 
     "Claim": { 
      "img_url": null, 
      "id": "4", 
      "user_id": "3", 
      "claim_status": "started", 
      "exp": "Sep 30, 2013" 
     }, 
     "User": { 
      "score": "0", 
      "id": "3" 
     }, 
     "ClaimResponse": [ 
      { 
       "id": "32", 
       "claim_id": "4", 
       "user_id": "14", 
       "created": "2013-06-10 03:18:35", 
       "modified": "2013-06-10 03:18:35" 
      }, 
      { 
       "id": "107", 
       "claim_id": "4", 
       "user_id": "8", 
       "created": "2013-06-28 02:37:10", 
       "modified": "2013-06-28 02:37:10" 
      }, 
      { 
       "id": "140", 
       "claim_id": "4", 
       "user_id": "976", 
       "created": "2013-06-28 04:19:22", 
       "modified": "2013-06-28 04:19:22" 
      }, 
      { 
       "id": "152", 
       "claim_id": "4", 
       "user_id": "19", 
       "created": "2013-07-03 02:27:12", 
       "modified": "2013-07-03 02:27:12" 
      }, 
      { 
       "id": "154", 
       "claim_id": "4", 
       "user_id": "1158", 
       "created": "2013-07-05 03:16:48", 
       "modified": "2013-07-05 03:16:48" 
      } 
     ], 
     "participants": { 
      "14": { 
       "user_id": "14", 
       "twitter_image_url": "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png" 
      }, 
      "8": { 
       "user_id": "8", 
       "twitter_image_url": "https://twimg0-a.akamaihd.net/sticky/default_profile_images/default_profile_3_normal.png" 
      }, 
      "19": { 
       "user_id": "19", 
       "twitter_image_url": "https://si0.twimg.com/sticky/default_profile_images/default_profile_2_normal.png" 
      }, 
      "1158": { 
       "user_id": "1158", 
       "twitter_image_url": "https://twimg0-a.akamaihd.net/sticky/default_profile_images/default_profile_5_normal.png" 
      } 
     }, 
     "viewer": { 
      "isResponsed": false, 
      "isOwner": false, 
      "lockedInPoint": 0, 
      "response": null, 
      "cut_loss": false, 
      "cut_loss_price": null 
     } 
    }, 
    { 
     "Claim": { 
      "img_url": null, 
      "id": "133", 
      "user_id": "14", 
      "claim_status": "started", 
      "exp": "Jul 15, 2013" 
     }, 
     "User": { 
      "score": "-40", 
      "id": "14" 
     }, 
     "ClaimResponse": [ 
      { 
       "id": "172", 
       "claim_id": "133", 
       "user_id": "8", 
       "created": "2013-07-12 20:36:16", 
       "modified": "2013-07-12 20:36:16" 
      }, 
      { 
       "id": "176", 
       "claim_id": "133", 
       "user_id": "1159", 
       "created": "2013-07-13 02:52:31", 
       "modified": "2013-07-13 02:52:31" 
      } 
     ], 
     "participants": { 
      "8": { 
       "user_id": "8", 
       "twitter_image_url": "https://twimg0-a.akamaihd.net/sticky/default_profile_images/default_profile_5_normal.png" 

      }, 
      "1159": { 
       "user_id": "1159", 
       "twitter_image_url": "https://twimg0-a.akamaihd.net/sticky/default_profile_images/default_profile_5_normal.png" 

      } 
     }, 
     "viewer": { 
      "isResponsed": false, 
      "isOwner": false, 
      "lockedInPoint": 0, 
      "response": null, 
      "cut_loss": false, 
      "cut_loss_price": null 
     } 
    } 
], 
"errors": [], 
"success": true, 
"code": 200 
} 

編輯:小提琴,由於@ohgodwhy的幫助。也許這更好地說明了我想要做的事情。我希望參與者圖標與其各自的聲明相關聯。這是接近,但似乎從第一個要求所有的參與者被拔...:

http://jsfiddle.net/gkGP4/5/

回答

0

問題當然是在我的循環中。我循環太快,並調用所有我最初迭代的變量d次(d是我嵌套循環中的項目數)。

這裏的解決方案:

var d = { 
"data": [{ 
    "Claim": { 
     "img_url": null, 
      "id": "4", 
      "user_id": "3", 
      "claim_status": "started", 
      "exp": "Sep 30, 2013" 
    }, 
     "User": { 
     "score": "0", 
      "id": "3" 
    }, 
     "ClaimResponse": [{ 
     "id": "32", 
      "claim_id": "4", 
      "user_id": "14", 
      "created": "2013-06-10 03:18:35", 
      "modified": "2013-06-10 03:18:35" 
    }, { 
     "id": "107", 
      "claim_id": "4", 
      "user_id": "8", 
      "created": "2013-06-28 02:37:10", 
      "modified": "2013-06-28 02:37:10" 
    }, { 
     "id": "140", 
      "claim_id": "4", 
      "user_id": "976", 
      "created": "2013-06-28 04:19:22", 
      "modified": "2013-06-28 04:19:22" 
    }, { 
     "id": "152", 
      "claim_id": "4", 
      "user_id": "19", 
      "created": "2013-07-03 02:27:12", 
      "modified": "2013-07-03 02:27:12" 
    }, { 
     "id": "154", 
      "claim_id": "4", 
      "user_id": "1158", 
      "created": "2013-07-05 03:16:48", 
      "modified": "2013-07-05 03:16:48" 
    }], 
     "participants": { 
     "14": { 
      "user_id": "14", 
       "twitter_image_url": "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png" 
     }, 
      "8": { 
      "user_id": "8", 
       "twitter_image_url": "https://twimg0-a.akamaihd.net/sticky/default_profile_images/default_profile_3_normal.png" 
     }, 
      "19": { 
      "user_id": "19", 
       "twitter_image_url": "https://si0.twimg.com/sticky/default_profile_images/default_profile_2_normal.png" 
     }, 
      "1158": { 
      "user_id": "1158", 
       "twitter_image_url": "https://twimg0-a.akamaihd.net/sticky/default_profile_images/default_profile_5_normal.png" 
     } 
    }, 
     "viewer": { 
     "isResponsed": false, 
      "isOwner": false, 
      "lockedInPoint": 0, 
      "response": null, 
      "cut_loss": false, 
      "cut_loss_price": null 
    } 
}, { 
    "Claim": { 
     "img_url": null, 
      "id": "133", 
      "user_id": "14", 
      "claim_status": "started", 
      "exp": "Jul 15, 2013" 
    }, 
     "User": { 
     "score": "-40", 
      "id": "14" 
    }, 
     "ClaimResponse": [{ 
     "id": "172", 
      "claim_id": "133", 
      "user_id": "8", 
      "created": "2013-07-12 20:36:16", 
      "modified": "2013-07-12 20:36:16" 
    }, { 
     "id": "176", 
      "claim_id": "133", 
      "user_id": "1159", 
      "created": "2013-07-13 02:52:31", 
      "modified": "2013-07-13 02:52:31" 
    }], 
     "participants": { 
     "8": { 
      "user_id": "8", 
       "twitter_image_url": "https://twimg0-a.akamaihd.net/sticky/default_profile_images/default_profile_5_normal.png" 

     }, 
      "1159": { 
      "user_id": "1159", 
       "twitter_image_url": "https://twimg0-a.akamaihd.net/sticky/default_profile_images/default_profile_5_normal.png" 

     } 
    }, 
     "viewer": { 
     "isResponsed": false, 
      "isOwner": false, 
      "lockedInPoint": 0, 
      "response": null, 
      "cut_loss": false, 
      "cut_loss_price": null 
    } 
}], 
    "errors": [], 
    "success": true, 
    "code": 200 
} 
    $.each(d.data, function (i, x) { 
id = x.Claim.id; 

    $('body').append('<div class="id"><p id="img'+x.Claim.id+'">Claim' + x.Claim.id + '</p></div>'); 
    $.each(x.participants, function (i, p) { 
    $('#img'+x.Claim.id).append('<img src="' + p.twitter_image_url + '"/>'); 
}); 
}); 

http://jsfiddle.net/gkGP4/6/

感謝所有的各種方法。

0

data數組包含包含所有其他數據的單個對象,所以你應該通過json.data[0],而環比json.data

當你有直接包含的數據對象,包含對象數組和包含對象對象的組合,你必須通過不同的方式的項目環找到屬性:

var ids = []; 
$.each(json.data[0], function(i, x) { 
    if (x.hasOwnProperty('user_id') { 
    ids.push(x.user_id); 
    } else { 
    $.each(x, function(j, y) { 
     if (y.hasOwnProperty('user_id') { 
     ids.push(y.user_id); 
     } 
    }); 
    } 
}); 
0

您必須選擇返回的JSON中的數據對象的索引。然後,一旦你有了,你可以迭代參與者。這是因爲data在返回時是array,所以我們需要選擇對象所在數據的索引。如果您不提供它,您將獲得undefined

$.each(json.data[0].participants, function(i,p){ 
    //access p with properties 
    console.log(p.twitter_image_url); //twitter image url 
    console.log(p.user_id); //user's id 
}); 

jsFiddle

+0

嗨,非常感謝@ohgodwhy。這讓我非常接近。實際上,我的json中有多個'Claim'對象,每個''participant''對象都與每個對象相關聯。我試圖用你的例子來得到它們,有點像'$ .each(x.participants,function(i,p){'。這爲我得到了它們,但我無法將它們附加到我修改了原始文章中的數據以顯示兩項索賠,每項索賠都與參與者有關,並且我試圖返回索賠id2:參與者14 8 18 115 115.索賠id133:參與者8,1159。我會扯掉它,但我會喜歡你的想法。 – dilettante

0

如果您正在尋找含ClaimID的和相關的參與者IDS

var result = $.map(response.data, function(item){ 
    return { ClaimId : item.Claim.id, Participants: $.map(item.participants, function(item1){ return item1.user_id; }) }; 
}); 
console.log(result); 

希望這有助於結果集。