如何用pandas读取JSON文件并导出为可读CSV,解决TypeError报错
JSON转CSV报错解决方案
错误原因
TypeError: list indices must be integers or slices, not str报错和JSON里出现多次trades无关,核心原因是你生成的JSON文件顶层是列表结构:
你之前调用接口时把每个投资组合的返回结果都用append存入了rjs列表,最终写入JSON的结构是[ { "trades": [...], "links": {...} }, { "trades": [...], "links": {...} } ],所以json.load得到的data是列表,不能直接用字符串'trades'做索引。
修复代码
把你JSON转CSV的部分替换为以下代码即可:
import csv import json # 读取JSON文件 with open('/Users/Filename.json') as json_file: data = json.load(json_file) # 合并所有投资组合的交易数据 all_trades = [] for portfolio_data in data: # 取出当前投资组合下的所有交易 trades = portfolio_data['trades'] for trade in trades: # 不需要links字段直接删除即可,如需保留portfolio链接可替换为下一行注释内容 trade.pop('links', None) # trade['portfolio_link'] = trade.pop('links', {}).get('portfolio', '') all_trades.append(trade) # 写入CSV with open('/Users/Filename.csv', 'w', newline='', encoding='utf-8') as data_file: # 取第一个交易的键作为表头,保证字段顺序一致 headers = all_trades[0].keys() csv_writer = csv.DictWriter(data_file, fieldnames=headers) # 写入表头 csv_writer.writeheader() # 批量写入所有交易数据 csv_writer.writerows(all_trades)
优化说明
- 遍历顶层列表的每个投资组合数据,统一提取
trades字段合并为总交易列表 - 处理了嵌套的
links字典字段,避免写入CSV时出现不符合预期的内容 - 改用
csv.DictWriter和with上下文管理器自动管理文件关闭,代码更稳定 - 显式指定编码为
utf-8避免特殊字符乱码问题
内容的提问来源于stack exchange,提问作者Tcs106
相关产品推荐
相关产品推荐

