Javascript 从json响应解析动态json对象
我有一个动态json对象Javascript 从json响应解析动态json对象,javascript,jquery,json,ajax,parsing,Javascript,Jquery,Json,Ajax,Parsing,我有一个动态json对象 { "servers":[ { "comp1":{ "server1":{ "status":"boxup", "ar":{ "0":"95.61" }, "ip":{ "0":"192.168.1.0"
{
"servers":[
{
"comp1":{
"server1":{
"status":"boxup",
"ar":{
"0":"95.61"
},
"ip":{
"0":"192.168.1.0"
}
},
"server2":{
"status":"boxup",
"ar":{
"0":"99.5"
},
"ip":{
"0":"192.168.0.1"
}
}
}
},
{
"comp2":{
"server1":{
"status":"boxup",
"ar":{
"0":"88.39"
},
"ip":{
"0":"198.168.1.1"
}
},
"server2":{
"status":"boxup",
"ar":{
"0":"99.88"
},
"ip":{
"0":"192.168.0.1"
}
}
}
},
{
"comp3":{
"server1":{
"status":"none",
"ar":"none",
"ip":"none"
},
"server2":{
"status":"boxup",
"ar":{
"0":"99.97"
},
"ip":{
"0":"http:\/\/122.01.125.107"
}
}
}
},
{
"comp4":{
"server1":{
"status":"boxup",
"ar":{
"0":"95.64"
},
"ip":{
"0":"192.168.1.0"
}
},
"server2":{
"status":"boxup",
"ar":{
"0":"95.65"
},
"ip":{
"0":"192.168.1.2"
}
}
}
},
{
"comp5":{
"server1":{
"status":"boxup",
"ar":{
"0":"71.92"
},
"ip":{
"0":"192.168.1.0"
}
},
"server2":{
"status":"boxup",
"ar":{
"0":"98.89"
},
"ip":{
"0":"192.168.0.3"
}
}
}
}
]
}
我试着用$.each解析它(参考下面)
但不幸的是,它返回了一个错误(请参阅下文)
未捕获的TypeError:无法读取未定义的属性“status”
请提供任何帮助、想法、建议、建议、线索?根据您的回答结构,以下内容将起作用
$.each(e.servers,function(index,value){
//log the status from server1 on every comp
console.log(value['comp'+(index+1)].server1.status);
});
输出为
boxup
boxup
none
boxup
boxup
编辑:
在注释中澄清后,并假设将有任何单个键
下面可以工作
$.each(e.servers,function(index,value){
//log the status from server1 on every comp
var key = Object.keys(value)[0];
console.log(value[key].server1.status);
});
从你的反应结构来看,以下几点会起作用
$.each(e.servers,function(index,value){
//log the status from server1 on every comp
console.log(value['comp'+(index+1)].server1.status);
});
输出为
boxup
boxup
none
boxup
boxup
编辑:
在注释中澄清后,并假设将有任何单个键
下面可以工作
$.each(e.servers,function(index,value){
//log the status from server1 on every comp
var key = Object.keys(value)[0];
console.log(value[key].server1.status);
});
通过观察JSON结构,我相信每个服务器对象(在servers数组中)都有一个属性,比如comp1、comp2。。。这还不清楚 下面的代码有效
var comp = {}; //Just a temp variable to hold dynamic comp property
// value
$.each(v.servers,function(i,v){
//Loop through each key in server object to find first property.
for(var key in v) {
//Make sure its objects own property, just to be safe.
if(v.hasOwnProperty(key)) {
// Fetch our comp (assumed, you can also match key
// and make sure it starts with comp ...
comp = v[key];
break;
}
}
//As we have our comp object, now we can access server1, server2 as shown below
console.log(comp.server1.status);
});
希望这有帮助!!如果您需要进一步帮助,请告诉我……) 通过观察JSON结构,我相信每个服务器对象(在servers数组中)都有一个属性,比如comp1、comp2。。。这还不清楚 下面的代码有效
var comp = {}; //Just a temp variable to hold dynamic comp property
// value
$.each(v.servers,function(i,v){
//Loop through each key in server object to find first property.
for(var key in v) {
//Make sure its objects own property, just to be safe.
if(v.hasOwnProperty(key)) {
// Fetch our comp (assumed, you can also match key
// and make sure it starts with comp ...
comp = v[key];
break;
}
}
//As we have our comp object, now we can access server1, server2 as shown below
console.log(comp.server1.status);
});
希望这有帮助!!如果您需要进一步帮助,请告诉我……) 这段代码怎么样。它将处理动态关键点、对象数量和动态内部对象
$.each(data.servers, function(key, value) {
$.each(this,function(key,value){
var parentObj = key;
$.each(value,function(key,value){
console.log(parentObj + '------'+key + '-----'+value.status);
});
});
});
这是一个
这是输出
comp1------server1-----boxup
comp1------server2-----boxup
comp2------server1-----boxup
comp2------server2-----boxup
comp3------server1-----none
comp3------server2-----boxup
comp4------server1-----boxup
comp4------server2-----boxup
comp5------server1-----boxup
comp5------server2-----boxup
这个代码怎么样。它将处理动态关键点、对象数量和动态内部对象
$.each(data.servers, function(key, value) {
$.each(this,function(key,value){
var parentObj = key;
$.each(value,function(key,value){
console.log(parentObj + '------'+key + '-----'+value.status);
});
});
});
这是一个
这是输出
comp1------server1-----boxup
comp1------server2-----boxup
comp2------server1-----boxup
comp2------server2-----boxup
comp3------server1-----none
comp3------server2-----boxup
comp4------server1-----boxup
comp4------server2-----boxup
comp5------server1-----boxup
comp5------server2-----boxup
您正在尝试循环一个json。json是一个字符串。您需要将它解析为一个对象,然后循环它,为什么要执行
e.success
?您是否正在尝试检查ajax调用是否成功??或者来自服务器的消息在其中成功了?因为数组中的每个对象都有一个名为comp[num]
的主键,该主键是一个对象,其中包含status属性的服务器对象。@Reddy,如果数据类型
设置正确,jQuery将自动解析JSON。你不需要再次解析它。@Andy。感谢您提供的信息,您正在尝试循环json。json是一个字符串。您需要将它解析为一个对象,然后循环它,为什么要执行e.success
?您是否正在尝试检查ajax调用是否成功??或者来自服务器的消息在其中成功了?因为数组中的每个对象都有一个名为comp[num]
的主键,该主键是一个对象,其中包含status属性的服务器对象。@Reddy,如果数据类型
设置正确,jQuery将自动解析JSON。你不需要再次解析它。@Andy。谢谢你的信息,Nice@Andy+1,Reddy在那个方向的评论..酷!!实际上,在某些情况下,它不是comp1,comp2等等。。所以我不能像console.log(value['comp'+(index+1)].server1.status那样解析它;因为comp是动态的,例如,它可以是“adelle”,而不是compIs,所以会有单键?哈哈,这就是我想知道的。。我认为是多重的。。他的服务器1也可以是多个。伙计们,唯一的动态是它们的关键对象,例如comp1、comp2等,其余的在json响应中是静态的。Nice@Andy+1,Reddy在那个方向的评论..酷!!实际上,在某些情况下,它不是comp1,comp2等等。。所以我不能像console.log(value['comp'+(index+1)].server1.status那样解析它;因为comp是动态的,例如,它可以是“adelle”,而不是compIs,所以会有单键?哈哈,这就是我想知道的。。我认为是多重的。。他的server1也可以是多个。伙计,唯一的动态是它们的键对象,例如comp1、comp2等,其余的在json响应中是静态的。