JSON拥有的属性名称

时间:2014-02-07 11:43:04

标签: javascript json

我需要一些JavaScript帮助。问题是我有一个类似于以下显示的JSON数据,但问题是我无法访问所有对象。通过我的功能,我可以访问[“x”,“y”,“z”],但我无法获得其他人“p,q,rk,a”。任何人都可以帮助我解决这个问题,请不要使用Object.Keys()。我不知道如何在Json Data中迭代。


var Objectkeys = function(obj){
    a = []
    for(var prop in obj){
    if(obj.hasOwnProperty(prop)){
        a.push(prop)
        }
    }
    return a;
};
var obj = {
    x: 1,
    y: 2,
    z: {
        p: "Hello",
        q: "Master",
        r: {
            k: "Rotten",
            a: "apple"
        }
    }
};
window.onload = function () {
console.log(Objectkeys(obj));
//console.log(Object.keys(obj));
}

谢谢

3 个答案:

答案 0 :(得分:0)

您还需要迭代嵌套对象:

var Objectkeys = function(obj){
        a = []
        for(var prop in obj){
            if (obj.hasOwnProperty(prop)) {
                a.push(prop);
                if (typeof obj[prop] === 'object') {
                    a = a.concat(Objectkeys(obj[prop]));
                }
            }
        };
        return a;
    };

答案 1 :(得分:0)

如果您正在使用递归函数,那么只需抓取对象键即可:

function getKeys(obj) {
  var arr = [];
  (function loop(obj) {
    for (var k in obj) {
      if (obj.hasOwnProperty(k)) {
        arr.push(k);
        if (typeof obj[k] === 'object') {
          loop(obj[k]);
        }
      }
    }
  }(obj));
  return arr;
}

console.log(getKeys(obj)); // ["x", "y", "z", "p", "q", "r", "k", "a"]

Demo

答案 2 :(得分:-1)

我不熟悉js,但是你不必首先检查一个属性是否包含对象,如果是,则迭代通过那些?那么在if语句中有一个for语句吗?