当前位置:首页 >> 智能终端演进 >> 【Ptyhon】关于自定义对象的Json序列化和反序列化,诺亚舟np1100

【Ptyhon】关于自定义对象的Json序列化和反序列化,诺亚舟np1100

cpugpu芯片开发光刻机 智能终端演进 3
文件名:【Ptyhon】关于自定义对象的Json序列化和反序列化,诺亚舟np1100 【Ptyhon】关于自定义对象的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, default=lambda obj: obj.__dict__)print(jsonStr)json.loads(jsonStr, object_hook=Main.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_hook=json_2_obj)# 将对象数据转换为json字符串def obj_2_json(obj):"""# 自定义类转json需要自定义一个转换成python基本类型的方法def obj_2_json(obj):return {"name":obj.name}"""return json.dumps(obj,default=lambda obj:obj.__dict__)
协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接