2013-03-18 3 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"]}} 

내가 파일을 읽을 수 코드 아래 사용을하지만, 어떤 이유로 항상 정의되지 않았거나 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/이분의 일 액세서 ... 그리고 안되는 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_encode로 json으로 바꾸고, 파일에 쓰고, 그 후에는 응용 프로그램에서 파일을 읽습니다. – Parrotmaster

+0

글쎄, 당신은 단지 PHP에서 배열을 올바르게 만들어야합니다. ('json_enode'를 언급했기 때문에 추측합니다;) 이름에 인덱스가있는 것은 잘못된 구조에 대한 명확한 표시입니다. 배열의 각 요소에는 이미 색인이 있습니다. 시간을 투자하고 구조를 올바르게 만들면 가치가 있습니다. 장기적으로 코드를 유지하는 것이 더 쉬울 것입니다. –

2

locatienaam은 배열이 아니므로 사용자가하는 것처럼 액세스 할 수 없습니다.

숫자와 문자열을 결합해야합니다. 그

data['locatie'+k] 
2

같은 뭔가이 시도 : naam 속성 값으로

$.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); 
     } 
    } 
}); 

당신이 문자열 값을 얻기 위해 그것에서 첫 번째 항목을 가져 오기 위해 필요 배열입니다.

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의 키는 인덱스 힌트를, 그래서 함께 "나암"에 액세스 해보십시오 :

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