将 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"}
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。