递归遍历JSON树

时间:2021-12-04 09:47:54

递归遍历JSON树

前几天有个人问我,json串的层级无限深,但在json串中的key是已知的,在json串中的value,有些事Object,有些是Array,如何把这些层级无限深的key所对应的value,若是Object,转为Array。

首先,如果遇到了这个层级无限深的问题,肯定是要用到递归的,那么递归的出口在哪里?就是判断,该key所对应的value值,是否是Object。

直接上代码

 function traversalJson(jsonObj) {
// 循环所有键
for(let key in jsonObj) {
let element = jsonObj[key];
//如果对象类型为object类型且数组长度大于0 或者 是对象 ,继续递归解析
if(element.length > 0 && typeof(element) === "object" || typeof(element) === "object") {
//当键值为配置项的这些键值时候,并且这些类型为Object,不是数组时候,使之变为数组。
for(let i=0;i<arrConfig.length;i++){
if(key===arrConfig[i]&& !(element instanceof Array)){
jsonObj[key] = [element];
}
}
traversalJson(element);
} else {
//不是对象或者数组,则不做操作
}
}
}
  //arrConfig是配置的数组