如何在嵌套的json文件中找到节点的深度?

时间:2016-06-27 05:49:28

标签: json

我找到了很多解决方案来查找嵌套json文件中的节点深度。但它会给我一个错误"超过最大递归深度" 当它设置了最大递归限制时,它表示"进程超出了一些错误代码" 作为我的问题的一部分,我还需要找出json文件中每个节点的关键名称。

示例json:



self.ref = FIRDatabase.database().reference()




输出应为:

节点: [data [media [image [height,width,src]],target [id,url],title,type,url]]

深度:4

2 个答案:

答案 0 :(得分:1)

function geth(obj) {
  var depth = 0;
  var k = Object.keys(obj);
  console.log(k);
  for (var i in k) {
      var tmpDepth = geth(obj[k[i]]);
      if (tmpDepth > depth) {
          depth = tmpDepth
      }
  }
  return 1 + depth;
}

答案 1 :(得分:1)

如果其他人来到这里,发现接受的答案不起作用,因为字符串的Object.keys()返回字符串每个字符的数组,因此对于大对象或具有大字符串的对象,它都会失败。 这是可行的->

function getDepth(obj){
    if(!obj || obj.length===0 || typeof(obj)!=="object") return 0;
    const keys = Object.keys(obj);
    let depth = 0;
    keys.forEach(key=>{
        let tmpDepth = getDepth(obj[key]);
        if(tmpDepth>depth){
            depth = tmpDepth;
        }
    })
    return depth+1;
}

例如-https://jsfiddle.net/95g3ebp7/