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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:41:46