2017-12-18 136 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>