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