如何通过命令行(JQ、json2csv、Python等)将嵌套JSON转为CSV
问题
已完成JSON数据的获取和过滤,现在需要将包含9个俱乐部字段、52个球员字段的复杂嵌套JSON转换为CSV格式。目前只能依赖在线JSON转CSV工具,该工具提供Python API(推测基于Python模块开发),希望通过脚本实现自动化转换。
解决方案
针对嵌套JSON转CSV的需求,核心是将嵌套结构扁平化:每个球员对应CSV的一行,俱乐部字段重复填充到对应球员的行中。以下提供两种Python实现方案,适配复杂嵌套场景:
方案1:使用Pandas(推荐,快速处理嵌套)
Pandas的json_normalize方法可以自动展开嵌套数组和字段,非常适合处理俱乐部-球员这类层级结构:
import pandas as pd import json # 1. 加载过滤后的JSON文件 with open("filtered_clubs.json", "r", encoding="utf-8") as f: club_data = json.load(f) # 2. 扁平化嵌套数据:展开players数组,保留所有俱乐部字段 # 替换meta列表为你实际的9个俱乐部字段名称 club_fields = ["club_id", "club_name", "foundation_year", "club_city", "coach_name", "league", "stadium", "capacity", "club_rating"] df = pd.json_normalize( club_data, record_path="players", # 指定要展开的球员数组路径 meta=club_fields # 指定需要保留的俱乐部字段 ) # 3. 导出为CSV df.to_csv("club_players.csv", index=False, encoding="utf-8-sig")
如果球员字段存在更深层次的嵌套(如player.stats.goals),可以通过修改record_path或在meta中指定嵌套路径(如meta=[["club", "id"], ["club", "name"]])来处理。
方案2:使用原生CSV模块(无依赖,完全自定义)
如果不想引入Pandas依赖,可以用Python原生csv模块手动遍历数据,合并俱乐部与球员字段:
import json import csv # 1. 加载JSON数据 with open("filtered_clubs.json", "r", encoding="utf-8") as f: club_data = json.load(f) # 2. 定义所有输出字段:俱乐部字段 + 球员字段 club_fields = ["club_id", "club_name", "foundation_year", "club_city", "coach_name", "league", "stadium", "capacity", "club_rating"] # 替换为你实际的52个球员字段名称 player_fields = ["player_id", "player_name", "position", "age", "nationality", ...] all_fields = club_fields + player_fields # 3. 写入CSV文件 with open("club_players.csv", "w", newline="", encoding="utf-8-sig") as csv_file: writer = csv.DictWriter(csv_file, fieldnames=all_fields) writer.writeheader() # 遍历每个俱乐部,再遍历其下的球员 for club in club_data: # 提取当前俱乐部的所有字段值 club_info = {field: club.get(field) for field in club_fields} # 处理每个球员,合并俱乐部信息与球员信息 for player in club.get("players", []): row = {**club_info, **player} writer.writerow(row)
关于在线工具的Python API
如果希望直接使用在线工具的API,只需按照其文档调用接口即可——本质上这类工具也是基于上述类似的Python模块实现的。自己编写脚本的优势是无需依赖外部服务,数据处理更安全、灵活。
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

