Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从json响应解析动态json对象_Javascript_Jquery_Json_Ajax_Parsing - Fatal编程技术网

Javascript 从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"

我有一个动态json对象

{
   "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响应中是静态的。