2012-04-21 4 views
1

나는 항상 쉽지 않을 것이라고 생각한다. 아래의 json을 사용하여 라우터 객체를 만들 계획이다. 나는 console.log를 썼다. 그래서 나는 크롬 콘솔에서 객체 프라퍼티에 접근하는 방법을 알아 내려고 할 수있는 break point spot을 가질 수 있었다. 그것은 for 루프로 결코 들어 가지 않습니다.javascript traverse json object

주요 질문은 JSON을 개체로 올바르게 설정하고 속성에 액세스하는 방법입니다.

<script type="text/javascript"> 
    $(document).ready(function(){ 

     $.getJSON('JSON/data.json', function(json) { 

      for (var i=0;i<json.length;i++){ 
       console.log("in for loop"); 
      } 

     }); 
    }); 

</script> 





{ 
"_id": { 
    "$oid": "4f91f2c9e4b0d0a881cf86c4" 
}, 
"DSC21": { 
    "Router": { 
     "online": [ 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1" 
     ], 
     "bytes": [ 
      "59.5721304971465", 
      "17014.1911069063", 
      "14858.8518936735", 
      "6875.20981475265", 
      "15157.6891384625", 
      "6363.47544785913", 
      "29446.2111270486", 
      "11517.9296243171", 
      "27077.9747917112", 
      "19867.79381695" 
     ] 
    } 
}, 
"DSC22": { 
    "Router": { 
     "online": [ 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1" 
     ], 
     "bytes": [ 
      "59.5721304971465", 
      "17014.1911069063", 
      "14858.8518936735", 
      "6875.20981475265", 
      "15157.6891384625", 
      "6363.47544785913", 
      "29446.2111270486", 
      "11517.9296243171", 
      "27077.9747917112", 
      "19867.79381695" 
     ] 
    } 
}, 
"DSC23": { 
    "Router": { 
     "online": [ 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1" 
     ], 
     "bytes": [ 
      "59.5721304971465", 
      "17014.1911069063", 
      "14858.8518936735", 
      "6875.20981475265", 
      "15157.6891384625", 
      "6363.47544785913", 
      "29446.2111270486", 
      "11517.9296243171", 
      "27077.9747917112", 
      "19867.79381695" 
     ] 
    } 
}, 
"DSC24": { 
    "Router": { 
     "online": [ 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1", 
      "1" 
     ], 
     "bytes": [ 
      "59.5721304971465", 
      "17014.1911069063", 
      "14858.8518936735", 
      "6875.20981475265", 
      "15157.6891384625", 
      "6363.47544785913", 
      "29446.2111270486", 
      "11517.9296243171", 
      "27077.9747917112", 
      "19867.79381695" 
     ] 
    } 
} 

}

+1

'$ .getJSON ('JSON/data.json', function (json) {console.log (json); ...}' – gdoron

+0

콘솔은 공백으로 남았습니다. – rd42

+1

JavaScript] (https://developer.mozilla.org/en/JavaScript/Guide)를 사용하여 객체 및 배열 작업 방법을 익힐 수 있습니다. –

답변

3

JSON은 자바 스크립트에서 기본적으로 사용할 수 있으며, 당신은 그것을 통과.

json["DSC21"]["Router"]["online"][0]; // 1 
json.DSC21.Router.online[0]; // equivalent 
json.DSC21.Router.online.0; // INCORRECT 

당신이 for .. in 건설을 사용하는 속성의 이름을 알고 그들을 통해 루프를 원하지 않는 경우 :

for (var key in json) { 
    console.log(key); // _id, DSC21, DCS22 etc.. 
    console.log(json[key]); // { "$oid": "" }, { "Router": ".." } etc. 
} 

이것은 hasOwnProperty 문제를 떠나지 않지만,하지해야 JSON 데이터를 읽는 중 문제가 발생했습니다.

+2

* "JSON은 기본적으로 JavaScript에서 사용할 수 있습니다"* 그게 무슨 뜻입니까? JSON ** 파서 **는 기본적으로 JSON을 객체/배열로 변환하는 JavaScript (ES5 이후)에서 사용할 수 있습니다. –

+0

중첩 된 객체 및 s 그 특정한 경우에이 솔루션을 어떻게 구현할 수 있습니까? – Zeeshan

+0

@xeeB 데이터 구조를 게시하고 읽을 속성을 올릴 수 있습니까? – Halcyon

4

가변 json 이미 목적이지만, 루프를위한 불충분하므로 일반적인 배열 아니다. json.length은 정의되어 있지 않으므로 i<json.length은 첫 번째 반복에서 실패하고 루프를 건너 뜁니다.

for (var key in json) { 
    // key is your DSCxxx 
    // json[key] is the corresponding object 
} 
+0

아 객체 배열이기 때문에 가능합니다. – rd42

+0

OP의 [이 댓글] (http://stackoverflow.com/questions/10261753/javascript-traverse-json-object#comment13193969_10261753) ... – gdoron

1

어쩌면 개체를 반복하는 방법을 알고 싶습니까? 여기

그렇게하는 방법이 될 것입니다 : 당신이 어떤 객체 또는 배열을 통과하는 것처럼

for(var key in json){ 
    if(key != '_id'){ 
     var router = json[key].Router; 
     for(var i = 0; i < router.online.length; i++){ 
     console.log(i + ' is online: ', router.online[i]==1?'true':'false'); 
     } 
     etc... 
    } 
}