2013-03-18 198 views
0

我正在尝试从JSON对象获取内容。 我一直在寻找谷歌,我认为应该工作,出于某种原因,不。从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

给您应该存取权限data.locatie0/1/2 ......而不是JSON data.locatie(如果不是拼写错误)。 –

+0

你没有在json中有一个名为locatie的数组! – 999k

+0

-1的任何原因? – Parrotmaster

回答

7

locatie[k]尝试访问locatie中对象的属性k,但在您的情况下,该数字是名称本身的一部分。你必须动态建立属性名称。此外,嵌套对象的每个属性是一个元素的数组,所以你要访问的第一个元素:

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; 
} 
+0

谢谢,这解决了我的问题。 – Parrotmaster

+0

是的我知道我的结构已经关闭,但是我不擅长创建数组。为了澄清,我在其他地方(后台)创建了一个数组,将其转换为json和json_encode并将其写入文件,之后我在应用程序中读取该文件。 – Parrotmaster

+0

那么,你只需要在PHP中正确创建数组(我假设你是因为你提到了'json_enode');)在名称中使用索引是一个坏结构的明确标志,因为这就是数组的用途。数组中的每个元素都有一个索引。值得花一些时间并正确地创建结构,从长远来看,维护代码会更容易。 –

2

locatienaam不是数组,因此您无法像访问它一样访问它们。

您必须将数字与名称组合为字符串。这样

data['locatie'+k] 
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属性的值是你需要为了得到字符串值读取它的第一个项目阵列。

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] 
); 
2

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

但在你的情况下,JSON的键有索引提示,所以尝试访问“NAAM”有:

data["locatie" + k]["naam" + k]