Python 进阶(十三):JSON 序列化和反序列化(json 模块)

在这里插入图片描述
大家好,我是水滴~~

本篇文章主要介绍json模块的功能,包括将Python对象序列化到文件、将Python对象序列化为字符串、序列化时类型的对照表、将文件中JSON数据反序列化为Python对象,将JSON字符串反序列化为Python对象、反序列化时类型的对照表等。

文章中包含大量的代码示例,能够帮助新手同学快速入门。

《Python入门核心技术》专栏总目录・点这里

文章目录

  • 1. 数据序列化
    • 1.1 使用`dump()`函数将数据序列化到文件
    • 1.2 使用`dumps()`函数将数据序列化为字符串
    • 1.3 序列化类型对照表
  • 2. 数据反序列化
    • 2.1 使用`load()`函数从文件中反序列化数据
    • 2.2 使用`loads()`函数从字符串中反序列化数据
    • 2.3 反序列化类型对照表
  • 3. 总结


JSON(JavaScript Object Notation)是一种常用的数据交换格式,它以简洁和易于理解的方式表示结构化数据。Python中的JSON模块提供了数据序列化和反序列化的功能,使您能够轻松地将Python对象转换为JSON格式,并将JSON数据转换回Python对象。本教程将详细介绍如何使用JSON模块进行数据序列化和反序列化,并提供一些示例代码帮助您入门。

1. 数据序列化

数据序列化是将Python对象转换为JSON格式的过程。JSON模块中的dump()dumps()函数可以实现数据的序列化。

1.1 使用dump()函数将数据序列化到文件

json模块是Python标准库中的一个模块,使用时直接使用import引入即可。下面是一个示例,演示如何使用dump()函数将Python对象序列化到文件:

import jsondata = {'name': '水滴','age': 20,'city': '青岛'
}# 将数据序列化到文件
with open('data.json', 'w', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False)

data.json文件内容:

{"name": "水滴", "age": 20, "city": "青岛"}

上述代码将一个字典对象序列化为JSON格式,并将其写入名为data.json的文件中。使用dump()函数,首先指定要序列化的数据对象,然后指定要写入的文件对象。

注意:使用ensure_ascii=False参数来保留中文字符,否则中文数据将转为ASCII码。

1.2 使用dumps()函数将数据序列化为字符串

下面是一个示例,演示如何使用dumps()函数将Python对象序列化为JSON格式的字符串:

import jsondata = {'name': '水滴','age': 20,'city': '青岛'
}# 将数据序列化为字符串
json_str = json.dumps(data, ensure_ascii=False)# 打印序列化后的字符串
print(json_str)

输出内容:

{"name": "水滴", "age": 20, "city": "青岛"}

上述代码将一个字典对象序列化为JSON格式的字符串。使用dumps()函数,将要序列化的数据对象作为参数传递给函数,并将返回的字符串赋值给变量json_str。最后,打印序列化后的字符串。

注意:使用ensure_ascii=False参数来保留中文字符,否则中文数据将转为ASCII码。

1.3 序列化类型对照表

在序列化时,会将 Python 原始类型转化为 JSON 类型,下面是序列化时数据类型转换的对照表:

PythonJSON
dictobject – 对象
list, tuplearray
strstring
int, float, int 和 float 派生的枚举number
Truetrue
Falsefalse
Nonenull

2. 数据反序列化

数据反序列化是将JSON格式的数据转换回Python对象的过程。JSON模块中的load()loads()函数可以实现数据的反序列化。

2.1 使用load()函数从文件中反序列化数据

下面是一个示例,演示如何使用load()函数从文件中反序列化数据:

import json# 从文件中反序列化数据
with open('data.json', 'r', encoding='utf-8') as file:data = json.load(file)# 打印反序列化后的数据
print(data)

输出内容:

{'name': '水滴', 'age': 20, 'city': '青岛'}

上述代码从名为data.json的文件中读取JSON格式的数据,并使用load()函数进行反序列化。通过打开文件并传递文件对象给load()函数,可以将文件中的JSON数据转换为相应的Python对象。

2.2 使用loads()函数从字符串中反序列化数据

下面是一个示例,演示如何使用loads()函数从字符串中反序列化数据:

import jsonjson_str = '{"name": "水滴", "age": 20, "city": "青岛"}'# 从字符串中反序列化数据
data = json.loads(json_str)# 打印反序列化后的数据
print(data)

输出内容:

{'name': '水滴', 'age': 20, 'city': '青岛'}

上述代码从一个JSON格式的字符串中反序列化数据。使用loads()函数,将要反序列化的JSON字符串作为参数传递给函数,并将返回的Python对象赋值给变量data。最后,打印反序列化后的数据。

2.3 反序列化类型对照表

在反序列化时,会将 JSON 类型转化为 Python 原始类型,下面是反序列化时数据类型转换的对照表:

JSONPython
object – 对象dict
arraylist – 列表
stringstr
number (int)int
number (real)float
trueTrue
falseFalse
nullNone

3. 总结

使用JSON模块进行数据序列化和反序列化,您可以方便地在Python和其他应用程序之间进行数据交换。本教程详细介绍了JSON模块的数据序列化和反序列化功能,并提供了代码示例帮助您入门。通过掌握这些基本用法,您可以在自己的项目中有效地使用JSON模块进行数据处理和交互。

请注意,本教程仅介绍了JSON模块的基本用法,还有其他一些高级功能和选项可供探索和学习。如需了解更多信息,请参阅Python官方文档中有关JSON模块的详细说明。

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

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

相关文章

Python 模块的使用方法

Python 模块是一种组织和封装代码的方式,允许你将相关的功能和变量放在一个单独的文件中,以便在其他程序中重复使用。在Python中,模块是一种可执行的Python脚本,其文件扩展名为 .py。这里,我将详细讲解Python模块的使用…

2023中医药国际传承传播大会在深圳召开

12月2日,2023中医药国际传承传播大会在深圳召开,大会由世界针灸学会联合会、中新社国际传播集团、中国新闻图片网、中国民族医药学会、中国针灸学会主办,世界针灸学会联合会健康传播工作委员会、中新雅视文化发展有限公司公司与深圳巨邦传媒集…

播放pcap抓包文件中的amr-wb、amr-nb、evs声音

前言 由于wireshark并不能解析amr-wb、evs数据,所以也就没办法播放响应的音频。在遇到问题时,想还原抓包的数据是否正常就很难受。为了解决这个问题,我看了RFC4867,想着自己写一个解包小工具,最后彻底放弃。。感觉太复…

Qt Creator :Analyze heob 使用教程

功能:在windows系统上检测和调试软件代码的内存泄漏情况; 使用环境 :需要下载 heob和dwarfstack 把dwarfstack动态库放在heob的执行程序目录下 使用步骤: 第三步:配置启动调试程序 第四步:配置heob的路…

什么因素会影响葡萄酒陈酿的能力?

糖、酸和酚类与水的比例是葡萄酒陈酿程度的关键决定因素,收获前葡萄中的水分越少,产生的葡萄酒就越有可能具有一定的陈酿潜力。那么葡萄品种、气候和葡萄栽培实践的过程就相当重要了,对陈酿的时间发挥了重要的作用。皮较厚的葡萄品种&#xf…

C++ 中的运算符重载(二)

运算符重载的实例和应用 运算符重载是一种非常实用和有趣的特性,它可以让我们对自定义类型的数据进行各种操作,从而实现一些复杂和高级的功能。下面我们就来介绍一些运算符重载的实例和应用,以及它们的代码和效果: 重载赋值运算…

docker:安装nginx并部署一个前端项目

文章目录 导语传统方式1、下载镜像2、copy项目文件到docker中3、访问 打包镜像的方式1、创建 Dockerfile2、创建 Nginx 配置文件3、构建 Docker 镜像4、运行 Docker 容器5、访问前端项目 总结 导语 这篇博客将介绍 docker 使用 nginx 部署前端项目的两种方式 传统方式 1、下…

C语言给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)

这个题目要求的输出是一串数字!!! 不是下面:输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非…

Python自动化测试之破解图文验证码

对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码, 验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑…

软考人数已超500万!请重视!

2020年40万,2021年94万,2022年129万,2023年软考报考人数已超500万!2年时间直翻10倍!如此火爆原因是什么? 不是打广告!不是打广告!不是打广告 千万不要上了”黑心培训结构“当&#x…

App的回归测试,有什么高效的测试方法?

直接抛出观点:高效的测试方法当然有,那就是采用【接口自动化】。 一、回归测试,测哪些东西 回归测试是软件测试过程中的一个重要的环节,如果说冒烟测试是对软件质量的抽检,那么回归测试就是保证软件质量的最后一道屏障…

集合01 - Java

集合 1、数组的不足2、集合3、集合的框架体系(背)CollectionMap 1、数组的不足 前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下。 数组: 长度开始时必须指定,而且一旦指定,不能更改…

Linux环境变量与命令行参数

Linux环境变量与命令行参数 一.命令行参数1.语法2.应用1:简易计算器 二.环境变量1.环境变量的概念2.环境变量的作用3.进一步理解环境变量的作用4.常见环境变量5.导出环境变量(添加环境变量)6.环境变量的特性7.另一种获取环境变量的方式8.小功能:用于身份验证的代码9.补充:第三种…

SAP CA01/CA02 创建及更新工艺路线BAPI

前言 最近需要做一个routing的批导,初步查过资料后,发现下面几个BAPI: BAPI_ROUTING_CREATE:最常用的BAPI,只支持创建,没有对应的CHANGE BAPI; ROUTING_MAINTAIN:不支持创建,只支…

C/C++,优化算法——使用遗传算法的旅行商问题(traveling-salesman-problem)的源程序

1 文本格式 #include <bits/stdc.h> #include <limits.h> using namespace std; // Number of cities in TSP #define V 5 // Names of the cities #define GENES ABCDE // Starting Node Value #define START 0 // Initial population size for the algorith…

HDFS 3.x 数据存储新特性-纠删码

HDFS是⼀个⾼吞吐、⾼容错的分布式⽂件系统,但是HDFS在保证⾼容错的同时也带来⾼昂的存储成本,⽐如有5T的数据存储在HDFS上,按照HDFS的默认3副本机制,将会占⽤15T的存储空间。那么有没有⼀种能达到和副本机制相同的容错能⼒但是能⼤幅度降低存储成本的机制呢,有,就是在HD…

ahk系列-windows超级运行框-表达式计算(12)—功能汇总

1、环境准备 windows 7&#xff0c;8&#xff0c;10&#xff0c;11操作系统ahk 2.x_64位翻译功能需要联网使用 2、使用方式 输入winR打开windows运行框 get/getpath 命令获取配置文件环境变量set/sets 设置 “用户/系统” 环境变量或者pathencode/decode 中文编码和解码len…

【算法题】一种字符串压缩表示的解压(js)

输入&#xff1a;2dff 输出 !error 两个d不需要压缩&#xff0c;故输入不合法 输入:4eA 输出:!error 全部由小写英文字母组成&#xff0c;压缩后不会出现&#xff0c;故输出不合法 function solution(str) {const error "!error";// 只能包含小写字母和数字 [^a-z0…

详解线段树

前段时间写过一篇关于树状数组的博客树状数组&#xff0c;今天我们要介绍的是线段树&#xff0c;线段树比树状数组中的应用场景更加的广泛。这些问题也是在leetcode 11月的每日一题频繁遇到的问题&#xff0c;实际上线段树就和红黑树 、堆一样是一类模板&#xff0c;但是标准库…

【荣誉】科东软件荣获广州市软件行业协会双料大奖!

软件产业在数字经济中扮演着基础支撑的角色&#xff0c;对于优化产业结构、提高自主可控、赋能整体经济高质量发展具有关键作用。 近日&#xff0c;广州市软件行业第七届会员大会第三次会议成功召开&#xff01;此次会议旨在回顾过去一年的行业发展&#xff0c;展望未来的趋势和…