循环遍历具有同名子节点的多级JSON对象



我有一个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
  • 查找对象中是否存在groupstags
  • 如果存在,则循环内部对象。
  • 应用正确的缩进,并按照上面的步骤对内部对象进行缩进。

我怎样才能做到这一点?

编辑:

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.")
    }
}

我无法弄清楚如何并行评估tagsgroups并打印保持水平的名称。

更确切地说,我不知道如何得到树的水平

要获得树的级别,我认为最简单的方法就是将当前级别传递给方法:

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);

最新更新