csv转JSON时触发int64类型无法JSON序列化报错如何解决
问题成因
调用pd.to_numeric()转换CSV字段后得到的是NumPy专属数值类型(比如np.int64、np.float64),Python原生json模块不支持直接序列化这类NumPy类型,因此触发报错。
脚本此前运行无异常,通常是因为旧版本Pandas/NumPy在部分场景下会自动将数值转换为Python原生类型,或是此前处理的CSV数据未触发返回纯NumPy数值类型的逻辑。
解决建议
- 方案1:转换时直接转成Python原生数值
所有pd.to_numeric()的调用结果末尾加.item(),该方法会自动将NumPy数值转为对应的Python int/float类型,修改示例:"metric": pd.to_numeric(row['risk1']).item(), "data": { "Risk1": pd.to_numeric(row["risk1"]).item(), # 其余所有pd.to_numeric调用都统一添加.item()即可 } - 方案2:为json.dumps配置自定义序列化规则
不需要修改原有数值转换代码,调用json.dumps时指定default参数,自动处理NumPy类型:import numpy as np jsonString = json.dumps(dataset, indent=4, default=lambda x: x.item() if isinstance(x, np.generic) else x) - 方案3:使用Pandas内置的JSON导出能力
直接用Pandas读取CSV加工后调用to_json()方法导出,不需要手动处理序列化逻辑,兼容性更好。
额外注意:你提供的CSV表头存在两个重复的
risk6字段,且没有risk7字段,修复序列化问题后还会触发字段不存在的报错,建议先修正CSV表头。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

