用于操作未知嵌套对象数组并打印包括键,键和值

时间:2016-06-24 13:12:44

标签: javascript arrays object

我正在尝试读取具有未知键和值的嵌套对象数组。

想要创建两组数组作为输出,一组包含所有元素,下一组是如何相关的

代码如下所示

var data = {
   "device":{
      "name":"Device1",
      "config":{
         "interface":[
            {
               "Loopback":{
                  "name":"{loopback-intf}",
                  "description":{
                     "_tags":"merge",
                     "__text":"Loopback{loopback-intf}"
                  },
                  "ip":{
                     "address":{
                        "primary":{
                           "address":"{ip-address}",
                           "mask":"255.255.255.255"
                        }
                     }
                  }
               },
               "_xmlns":"urn:www",
               "_tags":"merge"
            },
            {
               "Loopback":{
                  "name":"{loopback-intf}",
                  "description":{
                     "_tags":"merge",
                     "__text":"Loopback{loopback-intf}"
                  },
                  "ip":{
                     "address":{
                        "primary":{
                           "address":"{ip-address}",
                           "mask":"255.255.255.255"
                        }
                     }
                  }
               },
               "_xmlns":"http://ww.com/test/xx-xr",
               "_tags":"merge"
            }
         ]
      }
   }
};


function iter(obj) {
  for (var key in obj) {
    if (typeof(obj[key]) == 'object') {
      iter(obj[key]);
    } else {
      alert("Key: " + key + " Values: " + obj[key]);
    }
  }
}

//alert(JSON.stringify(iter(data)));
//console.log(iter(data));
iter(data);

上面只返回带键值对的元素,但我需要所有元素,以便我可以逐个将它们推送到第一个数组

device
name:Device1
config
interface
loopback
name:loopback-inf
description
tags:merge
_text:Loopback{loopback-intf}
ip
address
primary
address:"ip-address"
mask:255.255.255.255
_xmlns:urn:ios
_tags:merge and so on ....
  1. 此数组应具有在第一个数组中推送的每个元素的关系映射
  2. 我想我可以管理第二部分,如果我弄清楚如何在不知道关键和价值的情况下推动所有元素。

1 个答案:

答案 0 :(得分:1)

你快到了,试试这个

var data = {
  "device": {
    "name": "Device1",
    "config": {
      "interface": [{
        "Loopback": {
          "name": "{loopback-intf}",
          "description": {
            "_tags": "merge",
            "__text": "Loopback{loopback-intf}"
          },
          "ip": {
            "address": {
              "primary": {
                "address": "{ip-address}",
                "mask": "255.255.255.255"
              }
            }
          }
        },
        "_xmlns": "urn:www",
        "_tags": "merge"
      }, {
        "Loopback": {
          "name": "{loopback-intf}",
          "description": {
            "_tags": "merge",
            "__text": "Loopback{loopback-intf}"
          },
          "ip": {
            "address": {
              "primary": {
                "address": "{ip-address}",
                "mask": "255.255.255.255"
              }
            }
          }
        },
        "_xmlns": "http://ww.com/test/xx-xr",
        "_tags": "merge"
      }]
    }
  }
};

function iter(obj) {
  for (var key in obj) {
    if (typeof(obj[key]) == 'object') {
      if (!Array.isArray(obj)) {
        console.log(key);
      }
      iter(obj[key]);
    } else {
      console.log(key + " : " + obj[key]);
    }
  }
}

iter(data);

如果值的类型是object而不是Array,则需要打印密钥。