当前位置: 首页 > news >正文

Python基础教程: json序列化详细用法介绍

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

Python内置的json模块提供了非常完善的对象到JSON格式的转换。

废话不多说,我们先看看如何把Python对象变成一个JSON:

d = dict(name='Kaven', age=17, sex='Male')
print(json.dumps(d))  # {"name": "Kaven", "age": 17, "sex": "Male"}

说明:

dumps()方法返回一个str,内容就是标准的JSON。

类似的,dump()方法可以直接把JSON写入一个 Object。

要把JSON反序列化为Python对象,我们可以用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从Object中读取字符串并反序列化:

比如这样:

import json
json_str = '{"name": "Kaven", "age": 17, "sex": "Male"}'
print(json.loads(json_str)) # {'name': 'Kaven', 'age': 17, 'sex': 'Male'}

👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

资料、视频教程、代码、插件安装教程等我都准备好了,直接在文末名片自取就可


Python的dict对象可以直接序列化为JSON的{},那么如何用class对象,比如定义Person类,然后序列化?

dumps 可选参数default就是把任意一个对象变成一个可序列为JSON的对象,我们只需要为Person专门写一个转换函数,再把函数传进去即可:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import jsonclass Person(object):# __slots__ = ('name', 'age') # 通常class的实例都有一个__dict__属性,它就是一个dict,# 用来存储实例变量。也有少数例外,比如定义了__slots__的class,大家可以开启后运行看看报错信息def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef PersonToDict(cls):return {'name': cls.name,'age': cls.age,'sex': cls.sex}s = Person('Kaven', 17, 'Male')
print(json.dumps(s, default=PersonToDict))
# print(json.dumps(s, default=lambda obj: obj.__dict__)) 输出和上面一样
# 输出 : {"name": "Kaven", "age": 17, "sex": "Male"}

这样,Person实例首先被PersonToDict()函数转换成dict,然后再被序列化为JSON,大家看到下面有个lambda匿名函数,他的用处可大了,比如:

下次如果遇到一个Apple/Banaba等类的实例,可以把任意class的实例变为dict:

print(json.dumps(s, default=lambda obj: obj.__dict__)) # obj为对象参数名,可自定义

同样的道理,如果我们要把JSON反序列化为一个Person对象实例,loads()方法首先转换出一个dict对象,然后,我们再传入的object_hook函数负责把dict转换为Person实例:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import jsonclass Person(object):# __slots__ = ('name', 'age') # 通常class的实例都有一个__dict__属性,它就是一个dict,# 用来存储实例变量。也有少数例外,比如定义了__slots__的class,大家可以开启后运行看看报错信息def __init__(self, name, age, sex):self.name = nameself.age = ageself.sex = sexdef DictToPerson(d):return Person(d['name'], d['age'], d['sex'])json_str = '{"name": "Kaven", "age": 20, "sex": "Male"}'
cls = json.loads(json_str, object_hook=DictToPerson)
print(cls.name) # Kaven

Python还有个pickle模块,可能存在Python兼容问题,只能用Pickle保存那些不重要的数据。

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

相关文章:

Python基础教程: json序列化详细用法介绍

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 Python内置的json模块提供了非常完善的对象到JSON格式的转换。 废话不多说,我们先看看如何把Python对象变成一个JSON: d dict(nameKaven, age17, sexMale) print(json.dumps(d)) # {"na…...

一张图看懂 USDT三种类型地址 Omni、ERC20、TRC20的区别

USDT是当前实用最广泛,市值最高的稳定币,它是中心化的公司Tether发行的。在今年的4月17日之前,市场上存在着2种不同类型的USDT。4月17日又多了一种波场TRC20协议发行的USDT,它们各自有什么区别呢?哪个转账最快到账?哪…...

SegFormer之模型训练

单卡训练,所有配置文件里的【SyncBN】改为【BN】 启动训练 (1)终端直接运行 python tools/train.py local_configs/segformer/B1/segformer.b1.512x512.ade.160k.py (2)在编辑器中运行 在 [config] 前面加上’–‘将…...

Azure资源命名和标记决策指南

参考 azure创建虚拟机在虚拟机中选择编辑标签,并添加标记,点击应用 3.到主页中转到所有资源 4. 添加筛选器并应用 5.查看结果,筛选根据给服务器定义的标签筛选出结果。 参考链接: https://learn.microsoft.com/zh-cn/azure/cloud-adoption…...

【在一个升序数组中插入一个数仍升序输出】

在一个升序数组中插入一个数仍升序输出 题目举例: 有一个升序数组nums,给一个数字data,将data插入数组nums中仍旧保证nums升序,返回数组中有效元素个数。 比如:nums[100] {1, 2, 3, 5, 6, 7, 8, 9} size 8 data 4 …...

图像去雨、去雪、去雾论文学习记录

All_in_One_Bad_Weather_Removal_Using_Architectural_Search 这篇论文发表于CVPR2020,提出一种可以应对多种恶劣天气的去噪模型,可以同时进行去雨、去雪、去雾操作。但该部分代码似乎没有开源。 提出的问题: 当下的模型只能针对一种恶劣天气…...

YARN框架和其工作原理流程介绍

目录 一、YARN简介 二、YARN的由来 三、YARN的基本设计思想 四、YARN 的基本架构 4.1 基本架构图 4.2 基本组件介绍 4.2.1 ResourceManager 4.2.1.1 任务调度器(Resource Scheduler) 4.2.1.2 应用程序管理器(Applications Manager) 4.2.1.3 其他…...

多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab基于ZOA-CNN-BiGRU-Attention斑马优化卷积双向门控循环单元网络…...

centos上下载redis

1.redis 特点 Redis特性(8个) 1 速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型 2 持久化:rdb和aof 3 多种数据结构: 5大数据结构 …...

黑马项目一阶段面试58题 Web14题(二)

八、内连接和外连接查询有什么区别 内连接 获取两表的交集部分 外连接 获取某表的所有数据,以及两表的交集数据 九、事务管理的作用,四大特性 作用 保证多个增删改的操作,要么同时成功,要么同时失败 四大特性 1.原子性 事…...

软考高项-思维导图34-36(计算机高级系统项目管理师)

陆续更新一些软考高项的思维导图,都是一些必背知识点,希望可以帮助大家早日考过高项,早日当上高工,早日成为杭州E类人才。全部完整导图快速获取链接:计算机高级系统项目管理师-思维导图汇总 三十四、需求按层次分 三十…...

C++的stack和queue+优先队列

文章目录 什么是容器适配器底层逻辑为什么选择deque作为stack和queue的底层默认容器优先队列优先队列的模拟实现stack和queue的模拟实现 什么是容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总 结),…...

Ubuntu 18.04.6 Android Studio Giraffe adb logcat 无法使用

在 Ubuntu 18.04.6 上 在链接上设备以后,发现可以用 Android Studio 安装应用 但无法用 Android Studio 看 logcat 手动从命令行停止,启动 adb 会报错如下: daemon not running. starting it now on port 5037 ADB server didnt ACK fail…...

Python采集天气数据,做可视化分析【附源码】

嗨害大家好鸭!我是小熊猫~ 毕业设计大家着急吗? 没事,我来替大家着急 源码、素材python永久安装包:点击此处跳转文末名片获取 本文知识点: 动态数据抓包 requests发送请求 结构化非结构化数据解析 开发环境: python 3.8 运行代码 pycharm 2…...

优维低代码实践:自定义模板

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…...

电商3D产品渲染简明教程

3D 渲染让动作电影看起来更酷,让建筑设计变得栩栩如生,现在还可以帮助营销人员推广他们的产品。 从最新的《阿凡达》电影到 Spotify 的上一次营销活动,3D 的应用让一切变得更加美好。 在营销领域,3D 产品渲染可帮助品牌创建产品的…...

探索未来:元宇宙与Web3的无限可能

随着科技的奇迹般发展,互联网已经成为了我们生活的不可分割的一部分。然而,尽管它的便利性和普及性带来了巨大的影响,但我们仍然面临着传统互联网体验的诸多限制。 购物需要不断在实体店与电商平台间切换,教育依然受制于时间与地…...

GraphQL(六)登录态校验Directive

GraphQL Directive(指令)是GraphQL中的一种特殊类型,它允许开发者在GraphQL schema中添加元数据,以控制查询和解析操作的行为 Directive的详细说明及使用可见GraphQL(五)指令[Directive]详解 本文将介绍通过…...

强大的AI语言模型

1.kameAI 点我 1️⃣可以绘图 2️⃣对接4.0 3️⃣具有长篇写作...

成集云 | 鼎捷ERP采购单同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 鼎捷ERP(Enterprise Resource Planning)是一款综合性的企业管理软件,它包括了多个模块来管理企业的各个方面,其中之一就是采购订单模块。鼎捷ERP的采购订单模块可以帮助企业有效管理和控制采购过程…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

ESP32读取DHT11温湿度数据

芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...