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

时间:2013-06-03 12:47:27

标签: jquery json parsing

我有一个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并打印保持关卡的名称。

更确切地说,我无法弄清楚如何获得树的等级。

1 个答案:

答案 0 :(得分:1)

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

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