2013-07-14 87 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); 

希望这有助于结果集。