我目前正在尝试从JSON对象获取内容。 我一直在寻找谷歌和我认为应该工作的东西,出于某种原因,不是。
JSON看起来像这样:
{"locatie0":{"naam0":["Domplein"],"value0":["value1"]},"locatie1":{"naam1":["Neude"],"value1":["value1"]},"locatie2":{"naam2":["Vredenburg"],"value2":["value1"]},"locatie3":{"naam3":["Stadhuisbrug"],"value3":["value1"]},"locatie4":{"naam4":["Korte Minrebroederstraat"],"value4":["value1"]}}
我使用下面的代码来读取文件,但由于某种原因,它将始终返回undefined或NaN。
$.ajax({
url: "_data/pleinen.json",
type: 'get',
dataType: "json",
success: function(data) {
for(var k = 0; k < _loc.length; k += 1) {
var _locaties = data.locatie[k].naam[k];
// Should alert "Domplein", "Neude", "Vredenburg", "Stadhuisbrug", "Korte Minrebroekstraat",
alert(_locaties);
}
}
});
有人可以看看我的代码是否犯了错误,或者是否有更好的方法来阅读这些值?
答案 0 :(得分:7)
locatie[k]
尝试访问k
中对象的属性locatie
,但在您的情况下,该数字是名称本身的一部分。您必须动态构建属性名称。此外,嵌套对象的每个属性都是一个包含一个元素的数组,因此您必须访问第一个元素:
var _locaties = data['locatie' + k]['naam' + k][0];
但是你的数据结构有点奇怪。属性名称中的数字使得访问数据更加困难。如果您可以更改它,请将其更改为对象数组,如果不需要,则不要使用数组:
[{"naam": "Domplein", "value": "value1"}, {"naam": "Neude", "value":"value1"}]
然后访问数据就是:
for (var i = 0, l = data.length; i < l; i++) {
var _locaties = data[i].naam;
}
答案 1 :(得分:2)
locatie
和naam
不是数组,因此您无法按照自己的方式访问它们。
您必须将数字与名称组合为字符串。像这样的东西
data['locatie'+k]
答案 2 :(得分:2)
试试这个:
$.ajax({
url: "_data/pleinen.json",
type: 'get',
dataType: "json",
success: function(data) {
for(var k = 0; k < _loc.length; k += 1) {
var _locaties = data['locatie'+k]['naam'+k][0];
alert(_locaties);
}
}
});
由于naam
属性的值是数组,您需要从中获取第一项以获取字符串值。
答案 3 :(得分:2)
JSON不保证任何类似数组的订单。
但是在你的情况下,JSON的键有索引提示,所以尝试使用以下命令访问“naam”:
data["locatie" + k]["naam" + k]
答案 4 :(得分:1)
试试这个;
k = 0;
console.log(
data[ 'locatie'+ k]['naam'+ k][0],
data[ 'locatie'+ k]['value'+ k ][0]
);
k = 1;
console.log(
data[ 'locatie'+ k]['naam'+ k][0],
data[ 'locatie'+ k]['value'+ k ][0]
);