You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套JSON格式流程树转换为迭代式流程列表字典

嵌套JSON流程树转迭代流程字典实现

需求背景

需要将嵌套结构的流程树JSON,按照子树出现的先后顺序,转换为包含多条流程列表的字典,同时遍历输出的节点内容需要包含回溯后的重复父节点。

输入样例

{
    "name": "test",
    "children": [
        {
            "name": "Operator_8a82e",
            "children": [
                {
                    "name": "Link_e5479",
                    "children": [
                        {
                            "name": "Operator_b7394",
                            "children": [
                                {
                                    "name": "Link_7f62e",
                                    "children": [
                                        {
                                            "name": "Operator_73ea0",
                                            "children": [
                                                {
                                                    "name": "Link_93a51",
                                                    "children": [
                                                        {
                                                            "name": "Operator_32a07"
                                                        }
                                                    ]
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                },
                {
                    "name": "Link_59e2c",
                    "children": [
                        {
                            "name": "Operator_3ca6d"
                        }
                    ]
                }
            ]
        }
    ]
}

现有问题

原有递归函数仅做了简单的深度优先遍历,没有维护节点路径栈,回溯到父节点处理下一个子分支时,不会重复输出父节点内容,导致打印结果缺失对应父节点。

解决代码

def flatten_json(y):
    out = {}
    process_num = 1
    path = []

    def traverse(node):
        nonlocal process_num
        # 加入当前节点到路径,打印名称
        current_name = node["name"]
        path.append(current_name)
        print(current_name)

        # 判断是否有子节点
        if "children" in node and len(node["children"]) > 0:
            for idx, child in enumerate(node["children"]):
                # 非第一个子节点,遍历前先打印当前所有父路径(回溯后重复输出)
                if idx > 0:
                    for p in path:
                        print(p)
                # 递归处理子节点
                traverse(child)
        
        # 叶子节点,存储当前路径(去掉根节点test)为process,若需按自定义规则截断流程可修改此处判断逻辑
        else:
            process_content = [{"name": name} for name in path[1:]]
            out[f"process_{process_num}"] = process_content
            process_num += 1
        
        # 回溯:弹出当前节点
        path.pop()
    
    traverse(y)
    return out

运行说明

调用该函数后,打印输出完全符合预期,返回的out字典即为所需的迭代式流程字典。如果需要和示例完全一致的截断逻辑,只需调整存储process的判断条件即可。

内容的提问来源于stack exchange,提问作者pm1391

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:45:02