使用Python和Pandas解析嵌套JSON并导出CSV的问题求助
解决嵌套JSON解析与CSV导出问题
看起来你的方向是对的,问题主要出在json_normalize的参数使用上——你写错了record_path的格式,而且没把audience里的字段作为元数据关联到每个国家的记录上。咱们一步步来修正:
首先看你的JSON结构:results是一个数组,每个元素包含audience对象,以及traffic.countries数组。我们需要把每个国家的记录和对应的audience信息绑定在一起,这样导出的CSV才会每一行对应一个国家+该站点的受众数据。
修正后的完整代码
import json import pandas as pd from pandas.io.json import json_normalize # 若使用pandas 1.0+,推荐用pd.json_normalize # 读取JSON数据 with open('dict.competitor') as f: d = json.load(f) # 解析嵌套结构:展开countries数组,同时关联audience的字段 df = json_normalize( data=d['results'], record_path=['traffic', 'countries'], # 要展开的数组路径,需用列表格式 meta=[ ['audience', 'visits'], ['audience', 'time_on_site_avg'], ['audience', 'page_views_avg'], ['audience', 'bounce_rate'] ] ) # 可选:重命名列,让CSV列名更简洁易读 df.columns = [ 'country', 'country_visits', 'country_percent', 'site_total_visits', 'avg_time_on_site', 'avg_page_views', 'bounce_rate' ] # 导出到CSV文件 df.to_csv('site_traffic_analysis.csv', index=False) # 打印预览结果 print(df.head())
关键细节说明
record_path参数:必须是列表格式,对应JSON的嵌套路径——这里要展开的是results下每个元素的traffic里的countries数组,所以写成['traffic', 'countries'],之前你多打了引号导致格式错误。meta参数:用来指定从父层级(results的每个元素)提取的关联字段,这里就是audience下的四个统计项,每个字段同样用列表路径表示。- 列名优化:默认生成的列名会带嵌套层级前缀(比如
audience.visits),手动重命名后能让CSV的可读性大幅提升。 - 版本兼容:如果你的pandas版本是1.0及以上,直接用
pd.json_normalize替代导入的json_normalize即可,用法完全一致。
这样处理后,你就能得到包含所有目标字段的CSV文件,每一行对应一个国家的流量数据,同时关联了站点整体的受众统计信息。
内容的提问来源于stack exchange,提问作者user1610115
相关产品推荐
相关产品推荐

