2015-10-16 20 views
2

在我的javascript中,我試圖從服務器讀取JSON文件的值。該文件包含一個對象數組,但我無法訪問這些對象中的值。當我嘗試這個時,我的日誌說這個值是未定義的。但是,當我嘗試對數組中的對象進行字符串化時,它工作得很好。我究竟做錯了什麼?無法在javascript中訪問JSON數組的值

的JSON文件:

{ 
    "NETWORKS": [ 
    { 
     "NETWORK": { 
     "STARTDATE": "00:13:33:15:10:2015", 
     "SSID": "Ziggo323_AC", 
     "WPA": "YES", 
     "WEP": "NO", 
     "WPS": "YES", 
     "OPEN": "NO", 
     "WPATEST": { 
      "DURATION": "3000", 
      "DATE": "00:11:26:24:09:2015", 
      "ATTEMPTS": "594", 
      "STATUS": "FAILED" 
     }, 
     "WPSTEST": { 
      "DURATION": "2932", 
      "DATE": "03:11:28:24:09:2015", 
      "ATTEMPTS": "9", 
      "STATUS": "PASSED" 
     } 
     } 
    }, 
    { 
     "NETWORK1": { 
     "STARTDATE": "00:15:26:15:10:2015", 
     "SSID": "FreeWiFi", 
     "WPA": "NO", 
     "WEP": "NO", 
     "WPS": "NO", 
     "OPEN": "YES" 
     } 
    } 
    ] 
} 

JavaScript函數

function LoadTestResults() { 
    $.ajax({ 
    type: 'POST', 
    url: 'GetJSON.php', 
    data: "TestResults.json", 
    dataType: "json", 
    success: function (data) { 
     var wpsDuration = data.NETWORKS[0]; 
     console.log(JSON.stringify(wpsDuration)); // output ={"NETWORK":{"STARTDATE":"00:13:33:15:10:2015" etc. 
     console.log(wpsDuration.WPA); // output = undefined 
    } 
    }); 
} 
+0

我想你需要訪問它像console.log(wpsDuration.NETWORK.WPA),而不是console.log(wpsDuration.WPA); – Ripun

回答

2

只是嘗試:

wpsDuration.NETWORK.WPA 

或一個循環:

for (var k in data.NETWORKS) { 
    var network = data.NETWORKS[k]; 
    var networkKey = Object.keys(network).pop(); 

    console.log(networkKey, network[networkKey].WPA); 
} 
+0

這很有效,謝謝。但我希望這個功能是動態的。如果有很多網絡(如network1,network 2),我希望能夠像NETWORKS [x]那樣訪問它們。有沒有辦法做到這一點? –

+0

循環通過它們並將它們分別給出。 – Danmoreng

+0

所以你必須循環這個'wpsDuration'對象。檢查我的編輯。 – hsz

0

在此行之前放置一個debugger;var wpsDuration = data.NETWORKS[0];並檢查data

保持控制檯在調試時打開。一旦成功將達到 調試器將命中。

然後移動到控制檯窗口並嘗試不同的組合。這會幫助你理解你的對象。

0

我試着和它的工作對我來說

將一個調試器;在這行之前var wpsDuration = data.NETWORKS [0];並檢查數據

+0

您能詳細解釋一下您提供的解決方案嗎? – abarisone