如何将CSV文件转换为指定结构的JSON文件?
实现CSV转指定格式JSON的解决方案
针对你提供的CSV格式,要生成以Topic为顶级键、Characteristics为子键、Total为对应值的JSON结构,核心是避免重复Topic对应的数据被覆盖。以下是Python的实现方案:
核心思路
之前出现数据覆盖,是因为每次处理Topic时直接覆盖了已有的子字典。正确逻辑是:
- 初始化一个空字典存储最终结果
- 遍历CSV每一行数据,先检查当前
Topic是否已存在于结果字典中 - 若不存在则创建一个空的子字典,再将当前
Characteristics和Total添加到该子字典中;若已存在则直接向子字典添加键值对
代码实现
import csv import json # 初始化结果字典 result = {} # 读取CSV文件 with open('your_file.csv', 'r', encoding='utf-8') as csv_file: reader = csv.DictReader(csv_file) for row in reader: topic = row['Topic'] char = row['Characteristics'] # 转换Total的类型:区分整数和浮点数 total_value = float(row['Total']) if '.' in row['Total'] else int(row['Total']) # 检查Topic是否已存在,不存在则创建空字典 if topic not in result: result[topic] = {} # 向对应Topic的子字典添加键值对 result[topic][char] = total_value # 将结果写入JSON文件 with open('output.json', 'w', encoding='utf-8') as json_file: json.dump(result, json_file, indent=4, ensure_ascii=False)
代码说明
- 读取CSV:使用
csv.DictReader可以直接通过列名获取每一行的数据,无需处理索引 - 类型转换:CSV读取的
Total是字符串类型,需要根据是否包含小数点转换为整数或浮点数,保证JSON中的数值类型正确 - 避免覆盖:通过
if topic not in result的判断,确保每个Topic对应的子字典只会被初始化一次,后续只做键值对的添加操作
运行上述代码后,生成的output.json就会完全符合你需要的格式。
内容的提问来源于stack exchange,提问作者user8686353
相关产品推荐
相关产品推荐

