在项目中要用到json解析,有以下的json数组
其中replyLeaveWords为嵌套的子json数组,可以一直循环嵌套下去
我需要取出这些嵌套的子json数组,和外面的主json数组再组成一个新的json数组
于是找到下面两种方式:
//js动态取出json嵌套子json数组,组成新的数组
//方法一
function parseData(data) {
var lw = [];
var datas = data ; // 此处的datas为上述数据源
var len=datas.length;
//主json数组的长度len,循环遍历如果下面的replyLeaveWords字段有数组,就遍历所有的数组,增加主json数组的长度就是len+j,j为子json数组的遍历数,把遍历出的子json数组依次加入新的数组,最后push进最后的数组
for(var i = 0; i < len; i++){
var item = datas[i] ;
if(item.replyLeaveWords && item.replyLeaveWords.length != 0){
var child = item.replyLeaveWords ;
for(var j = 0; j < child.length; j++){
datas[len + j] = child[j] ;
}
len = datas.length ;
}
lw.push(item);
}
console.log("解析后的数据:"+lw);
return lw;
}
//js动态取出json嵌套子json数组,组成新的数组
//方法二
//与方法一同样的原理,使用forEach简化代码
function searchParentElementArrays (jsond) {
const res = [];
var jsondata=jsond;
const parsejson = (jsondata, arr) => jsondata.forEach(val => (val.replyLeaveWords && val.replyLeaveWords.length!=0) ? f(val.replyLeaveWords, [...arr, val]) : res.push([...arr, val]))
parsejson(jsondata, []);
console.log("解析前:"+jsondata);
console.log("解析后:"+res);
return res;
}
最终出来结果,有项目用到的只需改变嵌套的字段值即可,我的是replyLeaveWrods