无统一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
相关产品推荐
相关产品推荐

