2013-08-11 2 views
0

나는 JQuery를 사용하여 Json 파일을 구문 분석하고 있습니다. 여기서는 어떻게 변환해야하는지 도움이됩니다. 각 루프를 루프로 변환하면 루프 자체가 작동합니다. 다른 문제가 발생하면 data.lenght가 항상 발생합니다. 정의되지 않은 및 코드 루프로 이동하지 않습니다JQuery 구문 분석 Json 파일 크기가 정의되지 않았습니다.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> 
</script> 
    <script> 

    $.getJSON('db.json', function(data) 
    { 


    var items = []; 
    var i, val; 

    console.log(data); //is full and ok 
    console.log(data.length); //problem here 
    for (i=0; i< data.length; i++) 
    { 
     val = data[i]; 
     if(typeof val === 'object') 
     { 
      //doing some stuff 
     } 

    } 

    }); 

    </script> 

콘솔 : (당신이 그들에게 하나를 제공하지 않는 한)

Object { @file_name="materials", materials=[10], simulations=[10], more...} 
undefined 
+0

'getJSon'을하면 배열이 아닌 JSON 객체를 받게됩니다. 루프를 통해 배열을 먼저 가져와야합니다. (짧은) 데이터 샘플을 게시 할 수 있습니까? – JScoobyCed

+0

@JScoobyCed : JSON의 모양에 따라 최상위 엔티티는 객체 또는 배열이 될 수 있습니다. 그러나'console.log'의 출력에서 ​​yes가됩니다.이 경우에는 배열이 아닌 객체입니다. –

+0

@ T.J.Crowder 고마워, 난 이런 식으로 사용하지, 그게 작동 할 것이라고 기대하지 않았다 :) – JScoobyCed

답변

2

객체가 length 속성이 없습니다. 배열하지만 객체는 그렇지 않습니다.

해당 객체의 특정 영역을 반복하려는 경우 for-in 루프 또는 jQuery의 $.each을 사용할 수 있습니다.

for-in 루프 :

$.getJSON('db.json', function(data) 
{ 


var items = []; 
var i, val; 

for (i in data) 
{ 
    val = data[i]; 
    if(typeof val === 'object') 
    { 
     //doing some stuff 
    } 

} 

}); 

on my blogfor-in에 대해. 내가 JSON에서 직렬화 객체가 어떤 열거 상속 된 속성을 가질 수 있기 때문에 대해 상속 된 속성을 걱정하지 않고 위의를 사용하고 있습니다 *

$.each :.

$.getJSON('db.json', function(data) 
{ 


var items = []; 

$.each(function(i, val) { 
    if(typeof val === 'object') 
    { 
     //doing some stuff 
    } 

}); 

}); 

* ... "객체 직렬화 JSON에서 열거 가능한 상속 된 속성을 가질 수 없습니다. "

실제로 잘못되었으므로 누군가가 열거 가능 속성을 Object.prototype에 추가 한 경우 가질 수 있습니다. 그러나 프로덕션 코드에서이를 수행하는 모든 사람들은 구두로 대중들에게 매여 있어야합니다. :-)

2

콘솔 출력이 주어지면 반환 값은 (객체의) Array이 아니라 하나의 Object입니다. 개체에는 length 속성이 없습니다.