2

我正在尝试在 JSON 数据中搜索对象的属性。

但是我遇到了一个类似uncaught type error:length is not definedjQuery 的错误。我的 JSON 看起来像这样:

var list = {
    meta: {
        limit: 1000,
        offset: 0,
        previous: null,
        total_count: 1797
    },
    objects: [{
        id: 1215,
        location: {
            id: 1306,
            name: "Austin",
            parent_id: 43,
            type: "City",
        },
        name: "2ND Street District",
    }]
};

$.each(list.objects.location, function (i, v) {
    if (v.id.search(new RegExp(/1036/i)) != -1) {
        alert(v.name);
        return;
    }
});

给我关于这个问题的任何想法。

4

4 回答 4

1

您的代码中有两个错误。首先,您没有遍历数组。数组 ist list.objects,而不是list.objects.location(这就是您收到错误的原因length is not defined)。所以你必须把你的$.each()电话改成这样:

$.each(list.objects, function(i, v) {

现在您可以使用v.location.id来访问当前对象的 id。她来了下一个问题:它是一个整数,它没有函数search(),所以我们.test()直接在表达式上使用,它在测试之前将整数转换为所需的字符串,并将结果作为布尔值返回,这正是你需要在这里。

  if ( /1306/.test(v.location.id) ) {
    alert(v.name);
  }
});

看到一个工作jsfiddle

于 2013-10-08T09:03:25.073 回答
0

嗨,这个小提琴将在 json 中显示对象位置的所有数据。查看http://jsbin.com/AZAhaWo/3/edit

$.each(list.objects[0].location, function(i, v) 
    {

       alert(v);

    }
    });
于 2013-10-08T09:04:17.537 回答
0

对象是一个列表,然后里面是对象(位置),所以你必须使用 [0]

改变

$.each(list.objects.location

$.each(list.objects[0].location

更新

尝试这个

$(list.objects[0].location).each(function () {
    if (this.id.toString().match(/1036/g) != -1) {
        alert(this.name);
        return
    }
});
于 2013-10-08T08:31:06.813 回答
0

实际上有3个错误..json数据中有2个错误(虽然没关系但仍然)

 type: "City",
},
name: "2ND Street District",

应该

 type: "City"
},
name: "2ND Street District"

并改变

$.each(list.objects.location, function(i, v) 
{
  if (v.id.search(new RegExp(/1036/i)) != -1) 
   {
    alert(v.name);
        return;
    }
});

$.each(list.objects, function (i, v) {
            if (v.location.id.toString().search(new RegExp(/1036/i)) != -1) {
                alert(v.location.name);
                return;
            }
        });

因此,您的完整代码如下:

 var list = {
            meta: {
                limit: 1000,
                offset: 0,
                previous: null,
                total_count: 1797
            },
            objects: [
                {
                    id: 1215,
                    location: {
                        id: 1306,
                        name: "Austin",
                        parent_id: 43,
                        type: "City"
                    },
                    name: "2ND Street District"
                }
                ]
        };

        $.each(list.objects, function (i, v) {

            if (v.location.id.toString().search(new RegExp(/1036/i)) != -1) {
                alert(v.location.name);
                return;
            }
        });

这是一个工作演示

于 2013-10-08T09:07:06.873 回答