如何将自定义JSON编码器类导入数据目录处理DataFrame列表列?
解决JSONDataSet保存列表列为字符串及自定义编码器无法识别问题
一、修复自定义编码器逻辑
你的CustomEncoder存在代码错误:Python列表没有to_json()方法,调用时会直接抛出异常。修改编码器代码,确保正确序列化列表及非标准JSON类型:
# src/<你的项目名>/custom_encoders.py import json import numpy as np class CustomEncoder(json.JSONEncoder): def default(self, obj): # 处理numpy数组,转为Python原生列表 if isinstance(obj, np.ndarray): return obj.tolist() # 确保列表/元组被正确序列化 elif isinstance(obj, (list, tuple)): return list(obj) # 其他类型交给默认编码器处理 return super().default(obj)
二、配置正确的编码器路径
Kedro的JSONDataSet配置中,cls参数需要填写完整的Python类导入路径,确保Kedro能识别到你的自定义编码器:
config_new: type: json.JSONDataSet filepath: data/01_raw/new_config.json save_args: indent: 6 cls: <你的项目名>.custom_encoders.CustomEncoder
注意:替换
<你的项目名>为实际Kedro项目的名称(即src目录下的对应文件夹名)
三、验证效果
配置完成后重新运行保存逻辑,列表列会被序列化为标准JSON数组格式,而非字符串:
"T":[{"Col1": "9","Col2": ["7","9","0","5"]}]
内容的提问来源于stack exchange,提问作者SSR
相关产品推荐
相关产品推荐

