JavaScript:获取JSON数组中所有现有键

15

我有一个如下的JSON数组:

var jsonArray = [{"k1":"v1"},{"k2":"v2"},{"k3":"v3"},{"k4":"v4"},{"k5":"v5"}]

我不知道这个数组中存在哪些键。我想要获取数组中所有已有的键。

应该可以像这样实现:

for(i=0;i<jsonArray.lenght;i++){
  // something like-  key = jsonArray[i].key
  // alert(key);
}
请告诉我获取Json数组中所有存在的键的方法或方式。
谢谢。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys - georg
5个回答

19

为什么不使用一个

var jsonObject = {"k1":"v1","k2":"v2","k3":"v3","k4":"v4","k5":"v5"}

使用"你的"的替代方法

var jsonArray = [{"k1":"v1"},{"k2":"v2"},{"k3":"v3"},{"k4":"v4"},{"k5":"v5"}]

那么解决方案就非常简单:Object.keys(jsonObject)


当我尝试在一个jsonObj上使用你的解决方案Object.keys时,我会收到一个错误消息TypeError: object.keys()不是一个函数。 - pranshus
Object 是大写的。此外,该函数在过时的浏览器中不可用,您需要在那里进行填充 - Bergi
谢谢。这不是因为大小写的问题,而是因为我使用的是IE 7浏览器。 - pranshus

11

试试这个:

var L = jsonArray.length;
for (var i = 0; i < L; i++) {
    var obj = jsonArray[i];
    for (var j in obj) {
        alert(j);
    }
}

我也对您当前的代码进行了一些修改(比如缓存了 length )。


5
循环遍历对象的属性,并选择第一个“真正”的属性(根据您的数据架构,应该是唯一的真正属性)。
var jsonArray = [{"k1":"v1"},{"k2":"v2"},{"k3":"v3"},{"k4":"v4"},{"k5":"v5"}]

for (var i = 0; i < jsonArray.length; i++) {
    for (var prop in jsonArray[i]) {
        if (jsonArray[i].hasOwnProperty(prop)) {
            var key = prop;
            break;
        }
    }
    alert(key);
}

请参见如何在js对象中循环遍历项目?了解为什么在这里使用hasOwnProperty非常重要。

4

试试这个:

jsonArray.reduce(function(keys, element){ 
    for (key in element) {
       keys.push(key);
    } 
    return keys; 
},[]);

这也适用于数组对象中的多个键。如果你要支持没有reduce和map方法的旧浏览器,可以考虑使用一个shim。请参考这里

1
var id = { "object": "page", "entry": [{ "id": "1588811284674233", "time": 1511177084837, "messaging": [{ "sender": { "id": "1393377930761248" }, "recipient": { "id": "1588811284674233" }, "timestamp": 1511177084553, "message": { "mid": "mid.$cAAX_9pLcfu1mCnGmiVf2Sxd2erI2", "seq": 1882, "text": "a" } }] }] };

    function getKey(obj, data) {
//@author dvdieukhtn@gmail.com
      var data = data || [];
      if (obj) {
        var keys = Object.keys(obj);
        for (var pos in keys) {
          console.log();
          data.push(keys[pos]);
          if ((obj[keys[pos]].constructor === Array)) {
            for (var i = 0; i < obj[keys[pos]].length; i++) {
              getKey(obj[keys[pos]][i], data);
            }
          }
          else if (obj[keys[pos]].constructor === Object) {
            getKey(obj[keys[pos]], data);
          }
        }
        return data;
      }
    }
    console.log(getKey(id));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接