在 Python 中将数据类转换为 JSON
在本篇文章中,我们将了解 Python 如何支持 JSON 来为每个 JSON 根节点创建数据类。 我们还将学习 dataclass 作为 Python 字典的实现。
在 Python 中将数据类转换为 JSON
JavaScript Object Notation 或 JSON 表示使用由编程语言的文本组成的脚本(可执行)文件来存储和传输数据。
Python 通过 JSON 内置模块支持 JSON。 因此,我们将 JSON 包导入到 Python 脚本中以利用此功能。
JSON 中使用的带引号的字符串包含键值映射中的值。 它可以与 Python 的字典相媲美。
Python 原生支持 JSON 功能,并且 JSON 显示类似于标准库中的 marshal 和 pickle 模块用户的 API。
另一方面,数据类创建用于在其中存储数据的数据传输对象; 这些对象需要适当的定义方法来进行相等比较,有时用于显示。
dataclass 用于为数据传输类创建方法和短语法。
在 Python 中将数据类实现为字典
Python 3.7 及更高版本是唯一支持数据类装饰器的版本。 它产生一个对象,通常称为数据传输对象,其唯一功能是存储数据。
问题在于,为这些对象提供正确的功能需要创建用于相等比较、显示等的方法。
这些方法的开发必须是劳动密集型的并且容易出错。 数据类为您生成所有这些方法,为数据传输类提供了一个简短的语法。
它使用略有改动(并且更有效)的 dataclasses.asdict
版本进行序列化。
第一次将 JSON 反序列化为数据类实例时,您正在遍历数据类字段并为每个注释类型创建一个解析器,这使得该过程在重复时更加有效。
在 Python 中为每个 JSON 根节点创建一个数据类
由于“users”字段是一个包含“id”和“name”的对象数组,我们可以看出我们需要构造两个类:“Test”和“User”。
示例代码:
from dataclasses import dataclass
from typing import List
@dataclass
class User:
id: 1
name: "Kelvin"
@dataclass
class Test:
id: 2
userid:" Jack"
users: List[User]
每个 JSON 属性都应映射到类型安全的 Python 属性。
以下代码将每个 JSON 节点和属性映射到 Python 类和属性。 为此,我们在 Python 类中创建了一个静态方法,负责将我们的字典映射到您的 Python 属性。
示例代码:
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"}
请记住,数据传输对象是由数据类创建的,用于在其中存储数据。 因此,这些对象需要正确的方法定义来进行相等比较和偶尔显示。
数据传输类的方法和语法是使用数据类创建的。
相关文章
Python Dict 与 Asdict
发布时间:2023/06/19 浏览次数:177 分类:Python
-
obj._dict_() 背后的概述至少比 dataclasses.asdict(obj) 快十倍。Python 3.7引入了dataclasses库,让我们可以制作专门用于数据存储的结构化类。
在 Qt Creator 中开发 Python 应用程序
发布时间:2023/06/19 浏览次数:60 分类:Python
-
Qt Creator 是一个跨平台的 IDE,可让您为桌面、嵌入式和移动设备创建软件。 它在 Linux、macOS 和 Windows 操作系统上运行。本篇文章将介绍使用 Qt Creator 应用程序开发 Python 应用程序。
Python if-else 速记
发布时间:2023/06/19 浏览次数:72 分类:Python
-
本文解释了 Python 中 if-else 语句的简写表示法,它使用条件、正值和负值作为其组成部分。
Python 地址解析器
发布时间:2023/06/19 浏览次数:101 分类:Python
-
本文将向您展示如何使用 Python 解析地址。 我们将使用 pyparsing 库手动解析地址,并使用函数或 pyparsing 获取 CSV 文件中的地址。
使用 Python 列出串口
发布时间:2023/06/19 浏览次数:53 分类:Python
-
在本文中,我们将讨论使用串口或 com 端口的通信。 我们将深入探索 Python 包,以帮助我们获得系统的可用通信端口。
在 Python 中解析 ISO 8601 日期
发布时间:2023/06/18 浏览次数:121 分类:Python
-
我们将讨论典型的 ISO 8601 日期的结构,并向您展示如何将典型的 DateTime 对象解析为可以在所有地方使用的标准化 DateTime。ISO 8601 日期的结构
在 Python 中安装 Egg 文件
发布时间:2023/06/18 浏览次数:92 分类:Python
-
在本文中,我们将讨论如何在 Python 中安装 egg 文件,以及可用于实现此操作的工具。使用 setuptools 在 Python 中安装 egg 文件
使用 Python 获取 Redis 数据库中的所有键
发布时间:2023/06/18 浏览次数:127 分类:Python
-
本文将讨论如何使用Python获取 Redis 数据库中的所有键。使用 keys() 获取 Redis 数据库中的所有键 要使用 redis,我们需要安装它; 您可以查看 Redis 下载页面以了解操作方法。
修复 Python 中的 NLTK 词干异常
发布时间:2023/06/18 浏览次数:182 分类:Python
-
在 Python 中,我们可以借助 Python 的 NLTK 库提供的各种模块来完成此操作,但有时,您可能无法获得预期的结果。 本文将讨论为什么会出现这种差异,以及如何解决这些差异以获得我们想要的词