前言:
在Python开发中往往使用自定义的数据类型来封装属性特定对象。但是这些自定义的数据类型在导出成Json文件时往往会报出不支持的错误。本篇文章将介绍如何解决这个问题。
操作步骤:
1、创建自定义数据类型:
from dataclasses import dataclass
import json
@dataclass
class OwnObject():
prop1:str
prop2:int
2、将自定义数据类型导出到Json文件中:
ownObjList = []
ownObjList.append(OwnObject('param1',1))
ownObjList.append(OwnObject('param2',2))
ownObjList.append(OwnObject('param2',3))
with open('OwnObj.json','w') as f:
json.dump(ownObjList,f)
3、运行程序:
可以看到最后一行报错。OwnObject不支持Json序列化。
解决方法:
1、首先在自定义的数据类型中加入to_json的函数
@dataclass
class OwnObject():
prop1:str
prop2:int
def to_json(self):
return self.__dict__.copy()
2、然后在json.dump中加入lambda表达式 :
from dataclasses import dataclass
import json
@dataclass
class OwnObject():
prop1:str
prop2:int
def to_json(self):
return self.__dict__.copy()
ownObjList = []
ownObjList.append(OwnObject('param1',1))
ownObjList.append(OwnObject('param2',2))
ownObjList.append(OwnObject('param2',3))
with open('OwnObj.json','w') as f:
json.dump(ownObjList,f,default=lambda x: x.to_json())
3、导出的Json文件:
[{"prop1": "param1", "prop2": 1}, {"prop1": "param2", "prop2": 2}, {"prop1": "param2", "prop2": 3}]