Как я могу использовать python для добавления уникальных идентификаторов для детей JSON?

У меня есть файл JSON, который содержит много детей, например:

{
    "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
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

Я хочу добавить уникальный идентификатор для каждого ребенка, который соответствует уровню, на котором он находится, чтобы в итоге он выглядел следующим образом, где каждый идентификатор может сказать, сколько родителей имеет данные и насколько глубоко вы находитесь в json (например, 21.2.3.102 будет 102-м ребенком 3-го ребенка 2-го ребенка 21-го родителя):

{
"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
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}
}

Есть ли упрощенный способ сделать это для очень длинного файла JSON со многими детьми?

ПОЖАЛУЙСТА

Спасибо!

1 ответ

Решение

Вы можете использовать рекурсивную ходьбу, где 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"])
Другие вопросы по тегам