2017-12-18 142 views
0

我有一个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>

+0

JSON就像是在JavaScript原生。你可以简单地使用JSON.parse(data)来将json数据解析为js对象。 –

回答

1

您的代码中断当对象不具有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>