迭代json响应不起作用

时间:2013-12-14 20:30:04

标签: jquery json

$.ajax({
  type: "GET",
  url: "auth/classes/", 
  async: true,
  cache: false,
  success: function(data){
    var json=eval('('+data+ ')');

我得到的回应是

{
  "id":"1117",
  "name":"London"
}
{
  "id":"1118",
  "name":"New York
}
{
  "id":"1119",
  "name":"California"
}

我可以访问第一个数组,例如json['id']json['name']

如何迭代此回复?

3 个答案:

答案 0 :(得分:1)

因此,让我们专注于您的成功处理功能。特别是传递给它的data参数。如果来自服务器的响应的内容类型标题是application / json,那么jQuery足够聪明,可以理解并将javascript对象作为data参数传递。

如果您不知道服务器传回的内容,我建议您这样做:

success: function(data){
    console.log(data); 
}

然后检查控制台上的对象(我推荐Chrome,因为它有一个很棒的调试器)。如果不是javascript对象,而是将json作为文本,那么解析它的正确方法是:

var dataAsAnObject = JSON.parse(data);
// and accessing parts of the object once parsed, it depends on the object:
// you use [integer] to access arrays:
var thisIsTheThirdElementInAnArray = dataAsAnObject[3];
// you use ['string'] to access values by key in an associative array:
var thisIsTheValueOfKeyHello = dataAsAnObject['Hello'];

在你的情况下,它不清楚,因为你粘贴的是无效的json。但我的建议是单步执行调试器并将内容记录到控制台,以便您可以了解更多信息。

答案 1 :(得分:0)

不确定这里真正的问题是什么,你肯定没有得到你写的回复。也许你得到了:

[{“id”:“1117”,“name”:“London”},  {“id”:“1118”,“name”:“New York”},  { “ID”: “1119”, “名称”: “加利福尼亚”}]

数组?也许你是将数组作为对象的一部分?我想这个奇怪的结果与eval的奇怪用法有关(我真的没有得到你想要做的 - 解析一个JSON?)

但是因为它可能是一个数组,你可以用usual

迭代它
for (var i =0, i < data.length, i++) {
  console.log(data[i].id); //etc.. do something usefull with the data

}

答案 2 :(得分:0)

如果我正确理解你的问题,不,你不能直接过滤像这样的json数组。您必须迭代数组的每个json对象,以查找与您的标准匹配的对象。

例如,给出一个有效的json对象数组,如果你想过滤id属性并获得第一个匹配的属性,你可以像这样迭代:

function getCityById(data,ID) {
    var found=false, i=0;
    while (!found && i<data.length) {
        if (data[i].id === ID) {
            found=true;
        } else {
            i++;
        }
    }

    if (found) {
        return data[i];
    } else {
        return null;
    }
}

然后,您可以访问这样的特定ID:

var city = getCityById(data, 1117);
if (city != null) {
    var name = city.name; // should be "London"
}