2012-03-19 49 views
15

我有一个JSON阵列象下面这样:的Javascript:让所有现有密钥的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数组的所有键。

问候

+0

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys – georg 2012-03-19 08:59:20

回答

9

试试这个:

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); 
} 

对于为什么在这里使用hasOwnProperty很重要的说明,请参见How to loop through items in a js object?

3

试试这个:

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

这也应该适用于在数组对象多个密钥。

如果您支持没有缩小和映射的旧浏览器,请考虑使用shim

18

你为什么不使用

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)

+0

当我尝试您的解决方案Object.keys上jsonObj我得到一个错误信息类型错误:object.keys( )不是一个功能。 – pranshus 2013-06-27 14:58:18

+0

'对象'是大写字母。此外,该功能在过时的浏览器中不可用,您必须[在其中](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Compatibility ) – Bergi 2013-06-27 15:02:47

+0

谢谢。这不是由于这种情况。这是因为我在使用IE 7。 – pranshus 2013-07-01 09:39:36

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 [email protected] 
     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));