JSON打印从根到叶的所有路径

时间:2015-02-17 21:55:18

标签: python json

[
        {
            "name": "Basic",
            "id": "home",
            "childrens": [
                {
                    "name": "Dashboard",
                    "viewtype": "custom",
                    "view": "dashboard.html",
                    "childrens": []
                },
                {
                    "name": "DeviceInfo",
                    "href": "WSettings",
                    "childrens": [
                        {
                            "name": "DeviceInfo Form",
                            "childrens": [
                                {
                                    "name": "DeviceInfo Form1",
                                    "viewtype": "xml",
                                    "view": "dinfo",
                                    "childrens": []
                                },
                                {
                                    "name": "DeviceInfo Form2",
                                    "viewtype": "xml",
                                    "view": "complexjson",
                                    "childrens": []
                                }
                            ]
                        },
                        {
                            "name": "DeviceInfo Table",
                            "childrens": [
                                {
                                    "name": "DeviceInfo Table1",
                                    "viewtype": "xml",
                                    "view": "dinfotable",
                                    "childrens": []
                                },
                                {
                                    "name": "DeviceInfo Table2",
                                    "viewtype": "xml",
                                    "view": "jsontable",
                                    "childrens": []
                                }
                            ]
                        }

                    ]
                },
                {
                    "name": "Hybrid",
                    "childrens": [
                        {
                            "name": "Table-Form",
                            "viewtype": "xml",
                            "view": "hybrid",
                            "childrens": []
                        }
                    ]
                }
            ]
        },
        {
            "name": "Advanced",
            "id": "profile",
            "childrens": []
        }
]

想要打印从根到叶的所有路径(一个空'孩子' )。 E.g Basic.DeviceInfo.DeviceInfo Form.DeviceInfo Form1

DeviceInfo Form2

之前一切正常

对于 DeviceInfo表 DeviceInfo表单即将出现 - > Basic.DeviceInfo.DeviceInfo Form.DeviceInfo Table.DeviceInfo Table1。

这不应该发生。相反,我需要 Basic.DeviceInfo.DeviceInfo Table.DeviceInfo Table1。

我的代码出错了。任何解决方案?

def walk(list1, path = ""):
        for dic in list1:
            #print('about to walk', dic['name'], 'passing path -->', path)
            if(len(dic['childrens']) == 0):
                print('leaf --->', path+dic['name']+'.')
            else:
                path = path+dic['name']+'.'
                #passing parent name to childreni
                walk(dic['childrens'], path)

1 个答案:

答案 0 :(得分:4)

您在else子句中设置了path = path +dic['name']+'.'。一旦walk()函数完成遍历DeviceInfoForm'childrens',它就会尝试遍历DeviceInfoTable。但是,您的函数已经设置了路径 Basic.DeviceInfo.DeviceInfoForm.

您需要重新组织您的函数,以便不在else:语句中设置路径。也许

else:
    walk(dic['childrens'], path+dic['name']+'.')

这样你就可以将正确的路径传递给函数,但是没有明确地设置它。