【问题标题】:Javascript: Getting all existing keys in a JSON arrayJavascript:获取 JSON 数组中的所有现有键
【发布时间】:2012-03-19 08:43:16
【问题描述】:

我有一个如下的 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数组中存在的所有键的方法或方式。

问候

【问题讨论】:

标签: javascript jquery json jquery-ui


【解决方案1】:

你为什么不使用一个

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() is not a funtion。
  • Object 是大写的。此外,该功能在过时的浏览器中不可用,您必须shim it there
  • 谢谢。不是因为这个案子。这是因为我使用的是 IE 7。
【解决方案2】:

试试这个:

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

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

【讨论】:

    【解决方案3】:

    遍历对象属性,并选择第一个“真实”的(给定您的数据架构应该是唯一真实的)。

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

    请参阅How to loop through items in a js object?,了解为何在此处使用hasOwnProperty 很重要。

    【讨论】:

      【解决方案4】:

      试试这个:

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

      这也适用于数组对象中的多个键。

      如果您支持没有reduce 和map 的旧浏览器,请考虑使用shim

      【讨论】:

        【解决方案5】:
        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));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-30
          • 2021-10-13
          • 1970-01-01
          • 2019-02-21
          • 1970-01-01
          相关资源
          最近更新 更多