【Python】关于自定义对象的Json序列化和反序列化

news/2024/12/29 10:36:46/

背景

最近使用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)

总结

  1. 自定义对象转Json时需要自定义转换方法default,通常是将对象转为dict类型
    1. 可自定义dict数据内容
    2. 也可通过object.__dict__获取对象属性
  2. Json数据转换对象时需要自定义转换方法object_hook
    1. object_pairs_hook是有序数据方法,优先于object_hook
    2. object_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__)

http://www.ppmy.cn/news/1101676.html

相关文章

【开发】视频集中存储/直播点播平台EasyDSS点播文件分类功能优化

视频推拉流EasyDSS视频直播点播平台,集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

Python之线程Thread(一)

一、什么是线程 线程(Thread)特点: 线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;…

Hexo小结

Hexo小结 前段时间自己搭建了博客,后来维护太麻烦,放弃了,但还是做个基本使用的小结。 Hexo小结 Hexo 是一个基于 Node.js 的快速、简单和强大的博客框架。以下是一些常用的 Hexo 命令: hexo init [folder]:在指定文…

类和对象:构造函数,析构函数与拷贝构造函数

1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器…

LabVIEW利用人工神经网络辅助进行结冰检测

LabVIEW利用人工神经网络辅助进行结冰检测 结冰对各个领域构成重大威胁,包括但不限于航空航天和风力涡轮机行业。在起飞过程中,飞机机翼上轻微积冰会导致升力降低25%。研究报告称,涡轮叶片上的冰堆积可在19个月的运行时间内造成29MWh的功率损…

数据量大,分析困难?试试pandas随机抽样

前言 在数据分析和机器学习领域,随机抽样是一个非常重要的技术。它可以帮助我们从大量的数据中获取一部分样本,以进行统计分析、建模和预测。而在Python中,pandas是一个非常强大的数据分析库,它提供了许多方便的函数和方法来处理…

如何进行SEO优化数据分析?(掌握正确的数据分析方法,让您的网站更上一层楼!)

在互联网时代,SEO优化已经成为了每一个网站运营者必备的技能。而在SEO优化中,数据分析更是至关重要的一环。在本文中,我们将会详细介绍如何正确的进行SEO优化数据分析,让您的网站更上一层楼! 数据分析的重要性 数据分…

Python元类(metaclass)

Python 是一种强大的编程语言,一部分得益于其语言设计中独特的元类(Metaclass)机制。尽管元类的概念在刚开始接触时可能会让人感到困惑,但一旦理解了它们的工作原理和应用方式,我们就可以用它们做出强大且灵活的抽象。…