1

私はいつもそれが簡単になると思っています... 以下のjsonを使用してルーターオブジェクトを構築する予定です。console.log を置いたので、ブレーク ポイント スポットを作成して、Chrome コンソールからオブジェクト プロパティにアクセスする方法を見つけようとしました。ただし、for ループに入ることはありません。

主な問題は、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"
        ]
    }
}

}

4

3 に答える 3

4

変数jsonは既にオブジェクトですが、配列ではないため、通常の for ループでは不十分です。json.lengthは定義されていないため、最初の繰り返しで失敗i<json.lengthし、ループをスキップします。

for (var key in json) {
    // key is your DSCxxx
    // json[key] is the corresponding object
}
于 2012-04-21T18:31:10.360 に答える
3

JSON は JavaScript でネイティブに使用できます。オブジェクトや配列をトラバースするように、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 データを読み取るだけであれば問題にはなりません。

于 2012-04-21T18:33:34.573 に答える
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...
   }
}
于 2012-04-21T18:32:40.907 に答える