Javascript 获取当前JSON节点的完全限定名

Javascript 获取当前JSON节点的完全限定名,javascript,json,Javascript,Json,给定一个Javascript对象,如何遍历每个属性并获得每个节点的完全限定名?我正在尝试这样的事情: var test = { "axes" : [{ "stackType": "100%", "testObject": { "testProperty": "found" }, "minimum": 0 }, { "gridColor": "#test",

给定一个Javascript对象,如何遍历每个属性并获得每个节点的完全限定名?我正在尝试这样的事情:

var test = {
    "axes" : [{ 
        "stackType": "100%", 
        "testObject": {
            "testProperty": "found"
        },
        "minimum": 0
    }, {
        "gridColor": "#test", 
        "testArray": [
            {"jelly": 2}, {"jam": 3}
        ],
        "gridAlpha": 1
    }]
};

iterate(test);

function iterate(obj, parents) {

    if(!parents) { var parents = []; }

    for (var property in obj) {

        parents.push(property);

        if (obj.hasOwnProperty(property)) {

            if (typeof obj[property] == "object") { 
                iterate(obj[property], parents);
            } 
            else if (obj[property].constructor == Array) {
                for (var i = 0; i < obj[property].length; i++) {
                    iterate(obj[property][i], parents);
                }
            }
            else {
                console.log(parents + " : " + obj[property]);
            }

        }

    }

}
axes, 0, stackType : 100%
axes, 0, testObject, testProperty : found
axes, 0, minimum : 0
axes, 1, gridColor: #test
axes, 1, testArray, 0, jelly: 2
axes, 1, testArray, 1, jam: 3
axes, 1, gridAlpha: 1

但是,我只是添加了每个新属性,列表永远不会重置。

在循环中,您需要创建传入的
父数组的副本,并将
属性添加到该数组中,然后在递归调用中传递该属性。否则,您只是在修改相同的数组

var测试={
“轴”:[{
“stackType”:“100%”,
“testObject”:{
“testProperty”:“已找到”
},
“最小值”:0
}, {
“gridColor”:“测试”,
“测试阵列”:[{
“果冻”:2
}, {
“果酱”:3
}],
“gridAlpha”:1
}]
};
迭代(测试);
函数迭代(对象,父对象){
如果(!父母){
var父项=[];
}
for(obj中的var属性){
//更改行:
var path=[].concat(父级,属性);
if(对象hasOwnProperty(财产)){
if(对象类型[属性]=“对象”){
迭代(obj[property],path);//已更改
}else if(obj[property].constructor==Array){
对于(var i=0;i

嘿,谢谢。这很有效。我尝试了类似的方法,但我认为我的问题是将缓冲区变量(path)放在for循环之外。这也不是我需要的解决方案,因为我问错了问题。如果我给了您上下文(我需要合并两个对象),您可能会告诉我,我可以保存迭代并使用jQuery的$.extend,如下所示:$.extend(true,object1,object2);使用true使合并递归。我将此标记为答案,但记下此笔记,以防有人发现此答案试图解决与我相同的问题。