如何解析多级json?
Json格式(n级深):
[
{
"attr" : {
"id" : "97987"
},
"children" : [
{
"attr" : {
"id" : "97988"
},
"children" : [
{
"attr" : {
"id" : "97992"
},
"data" : "tag5"
}],
"data" : "tag2"
},
{
"attr" : {
"id" : "97993"
},
"data" : "tag6"
}
],
"data" : "tag1"
},
{
"attr" : {
"id" : "97989",
},
"children" : [
{
"attr" : {
"id" : "97990"
},
"data" : "tag4"
}],
"data" : "tag3"
}
]
例如。我想读每个孩子的“id”
我尝试了$.each
但是这允许我解析固定数量的级别。
答案 0 :(得分:7)
您需要使用recursion。
function get_all_ids(data) {
var result = [];
$(data).each(function (i, element) {
result.push(element.attr.id);
if (element.children && element.children.length > 0) {
var ids = get_all_ids(element.children);
result = result.concat(ids); // or $.merge(result, ids);
}
});
return result;
}
答案 1 :(得分:2)
使用$ .each()并检查每个对象的对象或数组。
这是一些代码。工作代码位于http://jsfiddle.net/cwdoh/KKFCZ/
function getAll( input, target ) {
var result = [];
function parseData( input, target ) {
$.each( input, function ( index, obj ) {
if ( index == target ) {
result.push( obj );
}
else {
switch ( $.type( obj ).toLowerCase() ) {
case "object":
case "array":
parseData( obj, target );
break;
}
}
} );
}
parseData( data, "id" );
return result;
}