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

无统一record_path时,用pandas.json_normalize处理嵌套JSON转CSV

解决JSON转CSV时展开嵌套hits列表的问题

你的问题核心在于JSON的顶级结构是动态键值对(比如boss1、boss2这类非统一命名的键),而非标准数组,所以pd.json_normalize无法直接通过record_path定位到hits列表。下面是可行的解决方案:

手动遍历+展开的实现步骤

先遍历每个顶级boss条目,把对应的hits列表逐个展开,同时将boss的标识和其他字段附加到每个hit条目上,最后合并成DataFrame再导出CSV:

import pandas as pd

# 假设你已经加载好JSON数据到boss_dictionary变量中
all_expanded_hits = []

# 遍历每个boss的键值对
for boss_identifier, boss_details in boss_dictionary.items():
    # 取出当前boss的hits列表,同时从boss_details中移除该字段(避免后续重复添加)
    hits_list = boss_details.pop("hits")
    # 给每个hit条目加上boss标识和其他固有字段
    for hit_entry in hits_list:
        hit_entry["boss_id"] = boss_identifier
        # 合并boss的其他字段到hit条目中
        hit_entry.update(boss_details)
        all_expanded_hits.append(hit_entry)

# 转换为DataFrame
result_df = pd.DataFrame(all_expanded_hits)
# 导出为CSV
result_df.to_csv("expanded_boss_hits.csv", index=False)

为什么之前的方法失效?

  • pd.read_json默认只会处理顶级结构,无法自动识别并展开嵌套在动态键下的列表。
  • pd.json_normalize需要明确的record_path,但你的JSON顶级是动态命名的键(不是固定的数组键名),没有统一路径可以直接指向所有hits列表,直接调用会抛出异常。

扩展说明

如果boss_details里还有其他嵌套的字典字段,可以在合并前先用pd.json_normalize处理单个boss的详情,比如:

# 替换上面的hit_entry.update(boss_details)部分
normalized_boss_details = pd.json_normalize(boss_details).to_dict(orient="records")[0]
hit_entry.update(normalized_boss_details)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:50:28