Python下将CSV文件转换为包含子列表数组的JSON格式遇到技术难题
解决CSV转嵌套结构JSON的问题
我明白你想要把CSV转换成包含子列表数组的特定JSON格式,原来的pandas代码确实没法直接生成这种嵌套结构,我来给你优化一下代码,完美匹配你要的输出!
问题分析
你的需求是把CSV里的Sub1和Sub2字段包装到subjects子数组中,同时外层要有sources键来包裹整个记录数组。而pandas默认的orient="records"只能生成简单的对象数组,没法处理这种嵌套的结构,所以需要额外做一些列处理。
优化后的代码
import pandas as pd import json # 读取CSV文件 df = pd.read_csv("/home/ubuntu/Proj/sample_2.csv") # 为每行生成subjects子数组:把Sub1和Sub2包装成数组内的对象 df['subjects'] = df.apply(lambda row: [{'Sub1': row['Sub1'], 'Sub2': row['Sub2']}], axis=1) # 删除原来的Sub1和Sub2列,避免重复 df = df.drop(columns=['Sub1', 'Sub2']) # 构造最终的JSON结构:外层用sources键包裹处理后的记录数组 final_result = {'sources': df.to_dict('records')} # 写入JSON文件,带缩进格式 with open("/home/ubuntu/Proj/csvToJson_2.json", 'w') as json_file: json.dump(final_result, json_file, indent=4)
代码解释
- 读取CSV:这部分和你原来的代码一致,用
pd.read_csv读取文件即可。 - 生成subjects列:用
apply遍历每行,把Sub1和Sub2的值放到一个对象里,再用数组包裹起来,这样就得到了你需要的subjects子列表结构。 - 删除冗余列:把原来的
Sub1和Sub2列删掉,避免最终JSON里出现重复字段。 - 构造最终结构:用
df.to_dict('records')把DataFrame转换成对象数组,然后放到sources键对应的value中,匹配你要的外层结构。 - 写入文件:用
json.dump来写入文件,indent=4可以让JSON格式更美观,和你期望的输出格式一致。
运行这段代码后,你就能得到完全符合要求的JSON输出啦!
内容的提问来源于stack exchange,提问作者user2675217
相关产品推荐
相关产品推荐

