我有一个JSON对象如下。
{
"name":"Me",
"groups": [
{
"name":"My Garage",
"groups":[
{
"name":"My Cars",
"groups":[],
"tags":[
{
"name":"Fiet Punto"
},
{
"name":"Gallardo"
}
]
},
{
"name":"My Bikes",
"groups":[]
}
]
},
{
"name":"My Bank",
"groups":[
{
"name":"Swiss Bank",
"groups":[]
},
{
"name":"Bank of America",
"groups":[],
"tags":[
{
"name":"Account 1"
},
{
"name":"Account 2"
}
]
}
]
}
],
"tags":[
{
"name":"My tag 1"
},
{
"name":"My tag 2"
}
]
}
我想要的输出如下:
Me
--My Garage
--My Cars
--Fiet Punto
--Gallardo
--My Bikes
--My Bank
--Swiss Bank
--Bank of America
-- Account 1
-- Account 2
--My Tag 1
--My Tag 2
我在构建递归时有一个问题。我想做的是:
- 取根对象
- 打印
name
。 - 查找对象中是否存在
groups
或tags
。 - 如果存在,则循环内部对象。
- 应用正确的缩进,并按照上面的步骤对内部对象进行缩进。
我怎样才能做到这一点?
编辑:
function getAllGroups(jsonObject)
{
//print the name of the current level object.
$("body").append(jsonObject.name);
//now if this object contains groups
if( jsonObject.hasOwnProperty( 'groups' ) )
{
//and if it is an array
if( jsonObject.groups.length > 0 )
{
//then for each object in groups of this object, call the function again.
$(jsonObject.groups).each(function(i, innerObject){
//print the index for debugging.
console.log(i + innerObject.name);
//make a recursive call to the function.
getAllGroups(innerObject);
});
}
}
else
{
console.log("does not exist anymore.")
}
}
我无法弄清楚如何并行评估tags
和groups
并打印保持水平的名称。
更确切地说,我不知道如何得到树的水平
要获得树的级别,我认为最简单的方法就是将当前级别传递给方法:
function getAllGroups(jsonObject,currentlevel)
{
//print the name of the current level object.
$("body").append(jsonObject.name);
//now if this object contains groups
if( jsonObject.hasOwnProperty( 'groups' ) )
{
//and if it is an array
if( jsonObject.groups.length > 0 )
{
var nextlevel = currentlevel+1;
//then for each object in groups of this object, call the function again.
$(jsonObject.groups).each(function(i, innerObject){
//print the index for debugging.
console.log(i + innerObject.name);
//make a recursive call to the function.
getAllGroups(innerObject,nextlevel);
});
}
}
else
{
console.log("does not exist anymore.")
}
}
通过启动第一层来使用它:
getAllGroups(yourJSON,1);