将 Python 类对象序列化为 JSON
本教程介绍序列化过程。 它还说明了我们如何使用 toJSON()
方法使 JSON 类可序列化,并包装 JSON 以转储到其类中。
Python 中的序列化
序列化过程涉及将对象转换为可以保存和以后检索的格式。 例如通过将对象的状态记录到文件中。
所有开发人员都必须在某个时候对所有项目进行序列化,即使这些项目非常复杂。 Python 编程语言在许多典型编程工作中的简单性是其出色的特性之一。
只需几行代码,文件 IO、绘制图形和访问在线内容都变得简单。 同样,python 使序列化变得简单,除非尝试序列化自定义类。
让我们在下面学习如何将类对象序列化为 JSON 对象。
使 Python 类 JSON 可序列化
Python 的内置 json 模块只能处理具有直接 JSON 对应物的 Python 基本类型。
明确地说,JSON 编码器 json.dump() 和 json.dumps() 的默认功能仅限于序列化最基本的一组对象类型(例如,字典、列表、字符串、数字、None 等)。
为了解决这个问题,我们必须创建一个独特的编码器,使我们的类 JSON 可以序列化。
可以通过各种方法使 Python 类 JSON 可序列化。 选择最适合您情况复杂性的选项。
下面给出了使 JSON 类可序列化的两种主要方法:
- toJSON() 方法
- 包装 JSON 以转储到其类中
使用 toJSON() 方法使 JSON 类可序列化
我们可以实现序列化器方法而不是 JSON 可序列化类。 例如,在此方法中,Object 类可能有一个返回 Object 信息字典的 JSON 函数。
由于所有 Object 属性都是本机类型,我们可以将此字典发送到编码函数中以获得 JSON 表示法。 最后,我们返回构成对象的属性值。
import json
class Object:
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,sort_keys=True, indent=4)
me = Object()
me.name = "kelvin"
me.age = 20
me.dog = Object()
me.dog.name = "Brunno"
print(me.toJSON())
Output:
{
"age": 20,
"dog": {
"name": "Brunno"
},
"name": "kelvin"
}
包装 JSON 以在其类中转储
另一种解决方案是子类化 JsonSerializable 类以创建包装 JSON 转储的 FileItem 类,如以下代码所示。
示例代码:
from typing import List
from dataclasses import dataclass, asdict, field
from json import dumps
@dataclass
class Students:
id: 1
name: "stu1"
@property
def __dict__(self):
return asdict(self)
@property
def json(self):
return dumps(self.__dict__)
test_object_1 = Students(id=1, name="Kelvin")
print(test_object_1.json)
输出:
{"id": 1, "name": "Kelvin"}
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串