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

如何优化多层Children数据合并至DataFrame的函数?

优化JSON层级children合并到DataFrame的递归方案

嘿,我懂你现在的困扰——手动写每一层的json_normalize不仅重复得让人头疼,要是哪天JSON的层级变深或者结构调整,这段代码直接就失效了。咱们换个思路,用递归遍历的方式来处理这种嵌套的children结构,不管有多少层都能自动适配,这才是可复用的优雅方案。

核心思路

递归的本质就是“自己调用自己”:我们从最顶层的节点开始,收集每个节点的非children字段数据,然后对每个节点的children做同样的操作,直到遍历完所有层级的节点,最后把所有收集到的节点数据转换成DataFrame。

实现代码

import pandas as pd

def flatten_children(node, parent_info=None):
    # 初始化当前节点的信息,继承父节点的字段(如果需要保留父层级信息的话)
    current_info = parent_info.copy() if parent_info else {}
    # 把当前节点的非children字段加入到当前信息中
    current_info.update({key: value for key, value in node.items() if key != "children"})
    # 先把当前节点加入结果列表
    result = [current_info]
    
    # 如果当前节点有children,递归处理每个子节点
    if "children" in node and node["children"]:
        for child in node["children"]:
            result.extend(flatten_children(child, current_info))
    
    return result

def get_combined_dataframe(catMapping):
    # 从JSON的根children节点开始遍历
    root_nodes = catMapping["SuccessResponse"]["Body"]["children"]
    all_nodes = []
    
    # 处理每个根节点及其子节点
    for root in root_nodes:
        all_nodes.extend(flatten_children(root))
    
    # 把所有节点数据转换成DataFrame
    return pd.DataFrame(all_nodes)

代码说明

  1. flatten_children函数:负责递归遍历单个节点及其所有子节点。它会把当前节点的非children字段收集起来,然后递归处理每个子节点,把子节点的结果合并到当前结果列表中。如果需要保留父层级的信息(比如父分类ID、父分类名称),parent_info参数会自动把父节点的字段传递给子节点,最终的DataFrame里每个子节点都会带上所有上层父节点的信息。
  2. get_combined_dataframe函数:作为入口函数,从你的JSON结构的根children节点开始,遍历每个根节点,调用递归函数收集所有节点数据,最后转换成DataFrame返回。

优势对比

  • 相比你之前手动分层的方案,这个递归方案完全自适应层级深度——不管是3层还是10层,代码都不需要修改。
  • 代码更简洁易维护,逻辑清晰,不会出现像你原来代码里那种重复的json_normalize调用。
  • 天然支持保留父层级信息,这是手动分层很难做到的(除非你手动给每一层加父字段)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:40:14