如何将嵌套JSON转换为CSV?Python层级展开问题求助
层级JSON转CSV实现(Python)
问题分析
你的JSON数据存在多层嵌套结构:顶层sites数组包含门店对象,每个门店的siteTraffic下的traffic数组才是具体的客流量记录。要生成目标CSV,需要把门店ID和每条流量记录关联,同时补充日期字段(示例中JSON未包含日期,需根据实际来源补充)。
代码实现
下面是直接可用的Python代码,适配你的数据结构:
import json import csv # 示例JSON数据(实际可从文件读取:with open('data.json', 'r') as f: data = json.load(f)) data = { "sites": [ { "storeID": "Store 1", "siteTraffic": [ { "traffic": [ { "startTime": "000000", "enters": "1", "exits": "6", "code": "02" }, { "startTime": "010000", "enters": "4", "exits": "2", "code": "02" } ] } ] } ] } # 目标CSV字段 csv_fields = ["Date", "Store ID", "Traffic Start Time", "Enters", "Exits", "Code"] # 假设日期固定为26/09/2023,若JSON中有日期字段可替换为对应取值逻辑 target_date = "26/09/2023" # 写入CSV with open('store_traffic.csv', 'w', newline='', encoding='utf-8') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=csv_fields) writer.writeheader() # 遍历每个门店 for site in data["sites"]: store_id = site["storeID"] # 遍历门店下的流量记录(注意siteTraffic是数组,取第一个元素的traffic数组) for traffic_item in site["siteTraffic"][0]["traffic"]: # 构造CSV行数据 csv_row = { "Date": target_date, "Store ID": store_id, "Traffic Start Time": traffic_item["startTime"], "Enters": traffic_item["enters"], "Exits": traffic_item["exits"], "Code": traffic_item["code"] } writer.writerow(csv_row)
关键说明
- 层级遍历逻辑:必须确保每条流量记录和所属门店ID绑定,这是直接用flatten函数容易出错的地方——通用flatten工具可能无法保留这种跨层级的关联关系。
- 日期字段:示例中JSON未包含日期,代码里用固定值代替。如果日期来自JSON的某个层级(比如每个门店或每条记录带日期),只需修改
target_date的取值逻辑即可。 - 扩展性:如果
sites下有多个门店,或者siteTraffic包含多个元素,代码会自动遍历所有数据,无需额外修改。
内容的提问来源于stack exchange,提问作者joelrhulesam
相关产品推荐
相关产品推荐

