年度网站建设工作总结,精准营销的主要价值,汽车logo设计图片创意,发优惠券网站怎么做背景
最近使用Ptyon爬虫数据时#xff0c;遇到对象无法转换为JSON序列化对象问题TypeError: Object of type Main is not JSON serializable
意思#xff1a; 就是对象不能转换为JSON序列化对象 原因#xff1a; 是对象没有自定义实现转换为JSON序列化对象的方法没有。
实…背景
最近使用Ptyon爬虫数据时遇到对象无法转换为JSON序列化对象问题TypeError: Object of type Main is not JSON serializable
意思 就是对象不能转换为JSON序列化对象 原因 是对象没有自定义实现转换为JSON序列化对象的方法没有。
实现
class Main(object):def __init__(self, name, age):self.name nameself.age agedef __str__(self):return Main(name{}, age{}).format(self.name, self.age)def __repr__(self):return Main(name{}, age{}).format(self.name, self.age)def to_json(self):return {name: self.name, age: self.age}classmethoddef from_json(cls, json_data):return cls(**json_data)if __name__ __main__:main Main(zhangsan, 18)# 因为Main是自定义对象如果没有指定default方法则无法转换为JSON序列化对象并且报错TypeError: Object of type StockData is not JSON serializable# jsonStr json.dumps(main)jsonStr json.dumps(main, defaultlambda obj: obj.__dict__)print(jsonStr)json.loads(jsonStr, object_hookMain.from_json)
总结
自定义对象转Json时需要自定义转换方法default通常是将对象转为dict类型 可自定义dict数据内容也可通过object.__dict__获取对象属性 Json数据转换对象时需要自定义转换方法object_hook object_pairs_hook是有序数据方法优先于object_hookobject_hook是无序数据方法
# 将json数据转换为对象
def json_2_obj(data):return Main(data[name],data[age])data json.loads(jsonStr,object_hookjson_2_obj)# 将对象数据转换为json字符串
def obj_2_json(obj):# 自定义类转json需要自定义一个转换成python基本类型的方法def obj_2_json(obj):return {name:obj.name}return json.dumps(obj,defaultlambda obj:obj.__dict__)