我正在尝试在JSON数据中搜索对象的属性。
但我在jQuery中收到类似uncaught type error:length is not defined
的错误。我的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;
}
});
给我关于这个问题的任何想法。
答案 0 :(得分:1)
您的代码中有两个错误。首先,您没有迭代数组。数组是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
答案 1 :(得分: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
}
});
答案 2 :(得分:0)
这个小提琴将显示json中对象位置的所有数据。检查http://jsbin.com/AZAhaWo/3/edit
$.each(list.objects[0].location, function(i, v)
{
alert(v);
}
});
答案 3 :(得分:0)
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;
}
});
这是一个有效的demo