如何使用 python 将唯一 ID 添加到 JSON children?

How can I use python to add unique IDs to JSON children?

我有一个 json 文件,里面有很多 children,像这样:

{
    "tree": {
        "name": "Top Level",
        "children": [
            {
                "name": "[('server', 'Cheese')]",
                "children": [
                    {
                        "name": "[('waiter', 'mcdonalds')]",
                        "percentage": "100.00%",
                        "duration": 100,
                        "children": [
                            {
                                "name": "[('server', 'kfc')]",
                                "percentage": "15.73%",
                                "duration": 100,
                                "children": [
                                    {
                                        "name": "[('server', 'wendys')]",
                                        "percentage": "12.64%",
                                        "duration": 100
                                    },
                                    {
                                        "name": "[('boss', 'dennys')]",
                                        "percentage": "10.96%",
                                        "duration": 100
                                    }
                                ]
                            },
                            {
                                "name": "[('cashier', 'chickfila')]",
                                "percentage": "10.40%",
                                "duration": 100,
                                "children": [
                                    {
                                        "name": "[('cashier', 'burger king')]",
                                        "percentage": "11.20%",
                                        "duration": 100
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

我想为每个 child 添加一个唯一的 ID,对应于他们所在的级别,所以它最终看起来像这样,其中每个 ID 可以告诉有多少 parent 数据你有多深入 json(例如,21.2.3.102 将是第 102 个 child 第 3 个 child 第 2 个 child 第 21 个 parent):

{
"tree": {
    "name": "Top Level",
    "id": 1
    "children": [
        {
            "name": "[('server', 'Cheese')]",
            "id": 1.1
            "children": [
                {
                    "name": "[('waiter', 'mcdonalds')]",
                    "percentage": "100.00%",
                    "duration": 100,
                    "id": 1.1.1
                    "children": [
                        {
                            "name": "[('server', 'kfc')]",
                            "percentage": "15.73%",
                            "duration": 100,
                            "id": 1.1.1.1
                            "children": [
                                {
                                    "name": "[('server', 'wendys')]",
                                    "percentage": "12.64%",
                                    "duration": 100,
                                    "id":1.1.1.1.1
                                },
                                {
                                    "name": "[('boss', 'dennys')]",
                                    "percentage": "10.96%",
                                    "duration": 100,
                                    "id":1.1.1.1.2
                                }
                            ]
                        },
                        {
                            "name": "[('cashier', 'chickfila')]",
                            "percentage": "10.40%",
                            "duration": 100,
                            "id":1.1.1.2
                            "children": [
                                {
                                    "name": "[('cashier', 'burger king')]",
                                    "percentage": "11.20%",
                                    "duration": 100,
                                    "id":1.1.1.2.1
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}
}

对于包含很多 children 的非常长的 json 文件,是否有简化的方法?

谢谢!

您可以使用递归遍历,其中 d - 您来自 json 的字典:

def walk(d, level="1"):
    d["id"] = level
    for i, child in enumerate(d.get("children", []), 1):
        walk(child, level + "." + str(i))

walk(d["tree"])