使用递归和循环解析JSON
我有一个JSON来解析。我试图用递归方法更换预定电流JSON具有类似于底部一个使用递归和循环解析JSON
Item 01 SubItem 01 
    InnerSubItem 01 
Item 02 
SubItem 01 
    InnerSubItem 01 
的结构使用我创建的功能,我能够解析只有第一套(根据01项内容) 。代码不回来为条件时,环路是假
代码使用
$.getJSON('https://api.myjson.com/bins/6atbz', function(data) {      repeat(data, data.layers);  
})  
function repeat(data, x) {  
    var layer = data.layers.reverse()  
    for (i = 0; i < x.length; i++) {  
    name = x[i].name  
    console.log(name)  
    if (x[i].layers.length > 0) {  
     repeat(data, x[i].layers)  
    }  
    }  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>回答:
您的代码中断当对象不具有layers财产。您应该在检查length之前检查它的存在。
例如
if (x[i].layers && x[i].layers.length > 0) 固定码:
$.getJSON('https://api.myjson.com/bins/6atbz', function(data) {      repeat(data, data.layers);  
})  
function repeat(data, x) {  
    var layer = data.layers.reverse();  
    for (var i = 0; i < x.length; i++) {  
    name = x[i].name;  
    console.log(name);  
    if (x[i].layers && x[i].layers.length > 0) {  
     repeat(data, x[i].layers);  
    }  
    }  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>在一个侧面说明,你似乎没有使用反转数组并在每次调用repeat时间不必要的传球data。你也许可以写这样的事情,而不是(扭转数组如果需要):
$.getJSON('https://api.myjson.com/bins/6atbz', function(data) {      repeat(data);  
})  
function repeat(data) {  
    if (!data || !data.layers)  
    return;  
    var x = data.layers;  
    for (var i = 0; i < x.length; i++) {  
    name = x[i].name;  
    console.log(name);  
    repeat(x[i]);  
    }  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>以上是 使用递归和循环解析JSON 的全部内容, 来源链接: utcz.com/qa/261638.html

