使用JSON的递归Javascript

使用JSON的递归Javascript,javascript,json,recursion,Javascript,Json,Recursion,我的目标不是跟踪递归调用发生的次数,而是跟踪JSON中的深度级别。我正在尝试使用递归创建具有适当缩进的HTML表。但是,我无法看到我处于什么级别,以确定相对于父元素正确“缩进”子元素的位置 我的结构如下: { "SMINFOREC":{ "TSUTC":{ "@attributes":{ "hex":"404211D8", "intermediate":"1078071768", "uom

我的目标不是跟踪递归调用发生的次数,而是跟踪JSON中的深度级别。我正在尝试使用递归创建具有适当缩进的HTML表。但是,我无法看到我处于什么级别,以确定相对于父元素正确“缩进”子元素的位置

我的结构如下:

{
   "SMINFOREC":{
      "TSUTC":{
         "@attributes":{
            "hex":"404211D8",
            "intermediate":"1078071768",
            "uom":""
         },
         "#text":"2014-03-05T16:22:48Z"
      },
      "Trig":{
         "@attributes":{
            "hex":"0003",
            "intermediate":"3",
            "uom":""
         },
         "#text":"3"
      },
      "GID":{
         "@attributes":{
            "hex":"0C90",
            "intermediate":"3216",
            "uom":""
         },
         "DLID":{
            "#text":"12"
         },
         "MLID":{
            "#text":"144"
         }
      },
      "TOH":{
         "@attributes":{
            "hex":"0005540F",
            "intermediate":"349199",
            "uom":"hours"
         },
         "#text":"96.999799822"
      }
   }
}
我想递归地迭代这个,并且知道我目前处理的级别的深度。我已经在这个级别上做了很长时间了,但是无法正确计算深度。有什么想法吗

编辑****

function iterate(obj,callback){
                      for (key in obj){
                       if(typeof obj[key] === 'object' && key !== "hex" && key !== "intermediate")
                        {
                           console.log("**********************************************");
                           console.log("key: " + key);
                           console.log("obj[key]: " + obj[key]);
                           console.log("level inside iterate callback: "  + level);
                           console.log("**********************************************");
                           iterate(obj[key],callback);

                        }
                       else if(key !="uom")
                       {
                           console.log("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
                           console.log("key: " + key);
                           console.log("obj[key]: " + obj[key]);
                           console.log("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
                           callback(obj[key]);
                       }

                      }
                      console.log("level: " + level);
                    }

                    iterate(jsonData[namespace].Data, function(obj){
                      level++;
                      console.log("---------------------------------------------");
                      console.log(obj);
                      console.log("level inside iterate: " + level);
                      console.log("---------------------------------------------");
                    });

我觉得很慷慨

var maxDepth = 0;
function traverse(node, depth) {
    maxDepth = Math.max(maxDepth, depth);
    //...do something with the data in the node if you want...
    //process children, if any
    for (var i in node) {
        traverse(node[i], depth+1);
    }
}

traverse(your-json);
您可以尝试以下操作:

function iterate(obj,callback){
  for (key in obj){
   if(typeof obj[key] === 'object')
    iterate(obj[key],callback);
   else callback(obj[key]);
  }
}

iterate(jsn, function(obj){
  console.log(obj);
});

如果需要计算深度,请在每次调用迭代函数时增加一些变量。

函数递归(foo,depth){recurse(otherfoo,depth+1);}
,基本上您尝试了哪些当前不起作用的方法?请参见上文。我已添加到描述中。谢谢。我更新了代码,增加了我要做的事情。我已经走了好几次这条路线,但是我在上面添加了一些描述,说明了我试图实现的目标。我用我想做的事情更新了代码。我已经走这条路线好几次了,但我在上面添加了一些描述,我正试图实现感谢