2012-04-21 11 views
1

私はいつもそれが楽になると思っています...私はルータオブジェクトを構築するために以下のjsonを使用する予定です。私はconsole.logを入れたので、ブレークポイントがあるので、クロムコンソールからオブジェクトのプロパティにアクセスする方法を考え出すことができました。しかし、forループに入ることはありません。javascriptトラバースjsonオブジェクト

主な質問は、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

@goudonコンソールは空白のまま残っています – rd42

+1

JavaScript](https://developer.mozilla.org/ja/JavaScript/Guide)を参照してください。 –

答えて

3

JSONはJavaScriptでネイティブに利用可能である、あなたはそれを通過します。

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

ネストされたオブジェクトや特定のケースでこのソリューションを実装するにはどうすればいいですか? – Zeeshan

+0

@xeeBデータ構造と読み込みたいプロパティを投稿できますか? – Halcyon

4

変数jsonは既にオブジェクトであるが、それは、配列ではないので、forループ典型的には不十分です。 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... 
    } 
} 
関連する問題