2012-03-19 99 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));