【问题标题】:JSON printing all paths from root to leafJSON打印从根到叶的所有路径
【发布时间】:2015-02-18 06:14:36
【问题描述】:
[
        {
            "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": []
        }
]

想要打印从根到叶的所有路径(一个为空的'childrens')。 例如 Basic.DeviceInfo.DeviceInfo Form.DeviceInfo Form1

DeviceInfo Form2

之前一切正常

说到DeviceInfo TableDeviceInfo Form就登场了 --> 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)

【问题讨论】:

    标签: python json


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      相关资源
      最近更新 更多