在 Python 中将数据类转换为 JSON

文章目录

    • 在 Python 中将数据类转换为 JSON
      • 在 Python 中将数据类实现为字典
      • 在 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: 1name: "Kelvin"@dataclass
class Test:id: 2userid:" 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: 1name: "stu1"@propertydef __dict__(self):return asdict(self)@propertydef json(self):return dumps(self.__dict__)test_object_1 = Students(id=1, name="Kelvin")
print(test_object_1.json)

输出:

{"id": 1, "name": "Kelvin"}

请记住,数据传输对象是由数据类创建的,用于在其中存储数据。 因此,这些对象需要正确的方法定义来进行相等比较和偶尔显示。

数据传输类的方法和语法是使用数据类创建的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测任务数据集的数据增强中,图像水平翻转和xml标注文件坐标调整

需求: 数据集的数据增强中,有时需要用到图像水平翻转的操作,图像水平翻转后,对应的xml标注文件也需要做坐标的调整。 解决方法: 使用pythonopencvimport xml.etree.ElementTree对图像水平翻转和xml标注…

设计模式-工厂设计模式

核心思想 在简单工厂模式的基础上进一步的抽象化具备更多的可扩展和复用性,增强代码的可读性使添加产品不需要修改原来的代码,满足开闭原则 优缺点 优点 符合单一职责,每个工厂只负责生产对应的产品符合开闭原则,添加产品只需添…

Qt中设置QListWidget滑动条滚动速度

QListWidget继承QListView控件,Qt帮助文档中说 QAbstractItemView::ScrollPerPixel 和QAbstractItemView::ScrollPerItem分别可以实现按item滚动和像数点滚动,但是好像都没效果。还有就是说通过创建QScrollBar有用,但是也没效果。 亲测还是这…

探讨uniapp的路由与页面生命周期问题

1 首先我们引入页面路由 2 页面生命周期函数 onLoad() {console.log(页面加载)},onShow() {console.log(页面显示)},onReady(){console.log(页面初次显示)},onHide() {console.log(页面隐藏)},onUnload() {console.log(页面卸载)},onBackPress(){console.log(页面返回)}3 页面…

【python编程基础】字符串、列表、元组与字典

1-字符串的答应 name xiaoming position 讲师 address 河北大学print(--------------------------------------------------) print("姓名:%s"%name) print("职位:%s"%position) print("地址:%s"%address)…

代码随想录算法训练营之JAVA|第三十九天|474. 一和零

今天是第39天刷leetcode,立个flag,打卡60天。 算法挑战链接 474. 一和零https://leetcode.cn/problems/ones-and-zeroes/ 第一想法 题目理解:找到符合条件的子集,这又是一个组合的问题。 看到这个题目的时候,我好像…

JAVA学习-愚见

JAVA学习-愚见 分享一下Java的学习路线,仅供参考【本人亲测,真实有效】 1、尽可能推荐较新的课程 2、大部分视频在B站上直接搜关键词就行【自学,B大的学生】 文章目录 JAVA学习-愚见前期准备Java基础课程练手项目 数据库JavaWeb前端基础 Vue…

学习设计模式之观察者模式,但是宝可梦

前言 作者在准备秋招中,学习设计模式,做点小笔记,用宝可梦为场景举例,有错误欢迎指出。 观察者模式 观察者模式定义了一种一对多的依赖关系,一个对象的状态改变,其他所有依赖者都会接收相应的通知。 所…

匈牙利算法 in 二分图匹配

https://www.luogu.com.cn/problem/P3386 重新看这个算法,才发现自己没有理解。 左边的点轮流匹配,看是否能匹配成功。对右边的点进行记录是否尝试过 然后有空就进,别人能退的就进 遍历左部点: 尝试匹配过程:

double类型的数值是否相等

由于浮点数double类型的精度问题,直接使用相等运算符 会导致不准确的结果。为了更准确地比较 double 类型的数值,可以使用以下方法: 方法一: 使用一个误差范围:定义一个小的误差范围,将两个数值的差值与该…

[C++] STL_vector 迭代器失效问题

文章目录 1、前言2、情况一:底层空间改变的操作3、情况二:指定位置元素的删除操作4、g编译器对迭代器失效检测4.1 扩容4.2 erase删除任意位置(非尾删)4.3 erase尾删 5、总结 1、前言 **迭代器的主要作用就是让算法能够不用关心底…

DataWhale 机器学习夏令营第三期——任务二:可视化分析

DataWhale 机器学习夏令营第三期 学习记录二 (2023.08.23)——可视化分析1.赛题理解2. 数据可视化分析2.1 用户维度特征分布分析2.2 时间特征分布分析 DataWhale 机器学习夏令营第三期 ——用户新增预测挑战赛 学习记录二 (2023.08.23)——可视化分析 2023.08.17 已跑通baseli…

【笔记】判断两个Double类型的值是否相同

在Java中,将两个double值转换为String类型,然后使用equals方法进行比较是一个常见的做法,但是这种方法并不是完全可靠,特别是在涉及浮点数的精度时仍然可能会遇到问题。 浮点数在内部以二进制表示,有时会存在舍入误差…

Android沉浸式实现(记录)

沉浸式先看效果 直接上代码 Android manifest文件 android:theme"style/Theme.AppCompat.NoActionBar"布局文件 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"ht…

mit s0681 lab2 Trace系统调用实现

实验一 实现一个用户级别的程序&#xff0c;功能为&#xff0c;指定系统调用后&#xff0c;跟踪程序的系统调用情况 分析实验 实验目标为实现一个程序去跟踪指定程序的系统调用。因此目标有两个 实现一个程序跟踪目标程序的系统调用 实现1&#xff0c;就需要在用户这边实…

4.18 TCP 和 UDP 可以使用同一个端口吗?

目录 TCP 和 UDP 可以同时绑定相同的端口吗&#xff1f; 多个 TCP 服务进程可以绑定同一个端口吗&#xff1f; 重启 TCP 服务进程时&#xff0c;为什么会有“Address in use”的报错信息&#xff1f; 重启 TCP 服务进程时&#xff0c;如何避免“Address in use”的报错信息…

HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制LazyForEach数据懒加载

LazyForEach从提供的数据源中按需迭代数据&#xff0c;并在每次迭代过程中创建相应的组件。当LazyForEach在滚动容器中使用了&#xff0c;框架会根据滚动容器可视区域按需创建组件&#xff0c;当组件划出可视区域外时&#xff0c;框架会进行组件销毁回收以降低内存占用。一、接…

智驾算力芯片市场仍处于「波动」周期,Momenta曝光自研NPU

用「冷热不均」来形容当下的汽车芯片赛道&#xff0c;再合适不过了。 本周&#xff0c;英伟达公布的第二财季&#xff08;5-7月&#xff09;营收达到创纪录的135亿美元&#xff0c;大幅超出了此前市场普遍预期的略高于110亿美元&#xff0c;同比增速更是达到了101%。 其中&…

接口测试总结分享(http与rpc)

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 一、了解一下HTTP与RPC 1. HTTP&#xff08;H…

【python】输出高亮信息的内容

背景 日志是定位问题和数据分析的关键手段之一&#xff0c;尤其是在调试阶段&#xff0c;高效的、具有辨识度的日志可以非常快速准确的进行问题定位。shell中的echo命令自带文本格式化输出的功能&#xff0c;我们先来回顾下基本的语法&#xff0c;然后套用到python中即可。 s…