使用JQuery,我试图解析JSON数据中的值。 我有以下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它输出3次两次警报显示有效数据和第三次警报显示undefined
我不知道它是怎么回事。我的代码有什么问题。
答案 0 :(得分:0)
当你获得json数据时,将它存储在某个变量中:
var myJsondata = {your json data};
以类似的方式尝试:
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);
等
答案 1 :(得分:0)
我认为问题在于您尝试在错误的对象上访问DEVICE。
尝试更多地破解您的代码(分离问题)。在那里添加一些console.log语句,你应该能够快速查看它发生的位置。
最重要的是,我会立即开始重构。这里的代码可读性可能是您最大的问题,这使您难以进行调试。如果您可以将其拆分为可管理的块并为变量名称赋予更多描述性意义(而不是试图保持它们简单/小),那么它也会对您有所帮助。
答案 2 :(得分:0)
VMSs.forEach(function(VMS) {
if(data[VMS].length > 0) {
console.log(data[VMS].length);
}
});
//input: 11 , 1
VMSs.forEach
可能循环两次。错误可能是由数据循环引起的,检查数据并使用console.log
打印数据;