使用递归和循环解析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

回到顶部