2014-07-21 119 views
0

使用JQuery,我試圖解析JSON數據的值。 我有以下JSON數據:使用jQuery從JSON數據解析值

{ 
    "VMServer": "VM Server 1", 
    "VMs": [{ 
    "ID": "AND-4.1", 
    "OS": "Android- 4.1", 
    "FLAVOUR": "", 
    "CAPS": { 
     "IE": "10", 
     "FF": "28", 
     "GC": "32" 
    }, 
    "DEVICE": { 
     "SAMSSU": [ 
     "S3", 
     "S4" 
     ], 
     "LG": [ 
     "G3", 
     "G4" 
     ] 
    } 
    } 
} 

使用以下代碼來提取josn數據。

function loadPlatforms(callback) { 
    $.getJSON('/getAllVMs', function (data) { 

    var html = ''; 
    var capVMs = {}; 
    var VMSs = Object.keys(data); 
    VMSs.forEach(function(VMS) { 
     if(data[VMS].length > 0) { 
     data[VMS].forEach(function (val) { 
      for(var brc in gBrowsers) { 
      if(val.CAPS.hasOwnProperty(brc)) { 
       var cap = val.OS + '-' + brc + '-' + val.CAPS[brc]; 
       alert(val.DEVICE) 
       var ds = Object.keys(val.DEVICE); 
       ds.forEach(function (bb) { 

      } 
      } 
     }); 
     } 
    }); 
     }); 
} 

但我越來越類型錯誤!

TypeError:val.DEVICE is not an object 
var ds = Object.keys(val.DEVICE); 

同時提醒val.DEVICE它輸出兩個三次警報顯示有效數據並顯示undefined 我不知道它是怎麼發生的第三次警報。我的代碼有什麼問題。

+0

alert(data);什麼是給你這個? – cracker

回答

0

當你得到JSON數據存儲在它的一些變量說:

VAR myJsondata = {您的JSON數據};

嘗試在類似的方式:

var obj = $.parseJSON(myJsondata); 
alert(obj.name === "John"); 

在你的JSON得到的值,可以使用

alert(obj.VMServer); 

進一步的數據可以使用

alert(obj.vms[0].ID =="AND-4.1"); 
alert(obj.vms[0].Device.samssu[0].s3); 

0

我相信問題在於你試圖在錯誤的對象上訪問DEVICE。

試着打破你的代碼更多(分離擔憂)。在那裏添加一些console.log語句,你應該能夠快速地看到它發生的地方。

最重要的是,我會立即開始重構。這裏的代碼可讀性可能是您最大的問題,這使您很難進行調試。如果你可以把它分成可管理的塊,並給你的變量名稱更具描述性的含義(而不是試圖讓它們簡單/小),那麼它也會幫助你。

0
VMSs.forEach(function(VMS) { 
    if(data[VMS].length > 0) { 
      console.log(data[VMS].length); 
    } 
}); 
//input: 11 , 1 

VMSs.forEach可能是循環兩次.the錯誤可能是由數據環路原因,請檢查您的數據和使用console.log打印數據;