0

我目前正在尝试从 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);
        }
    }
});

任何人都可以查看我的代码中是否有任何错误,或者是否有更好的方法来读取这些值?

4

5 回答 5

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;
}
于 2013-03-18T10:23:57.490 回答
2

Thelocatie和 thenaam不是数组,因此您无法像以前那样访问它们。

您必须将数字与名称组合为字符串。类似的东西

data['locatie'+k]
于 2013-03-18T10:23:57.743 回答
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属性的值是数组,因此您需要从中获取第一项以获取字符串值。

于 2013-03-18T10:24:56.100 回答
2

JSON 不像数组那样保证任何顺序。

但是在您的情况下,JSON 的键具有索引提示,因此请尝试使用以下命令访问“naam”:

 data["locatie" + k]["naam" + k]
于 2013-03-18T10:28:29.557 回答
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]
);
于 2013-03-18T10:27:24.007 回答