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,一经查实,立即删除!

相关文章

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语言给定数字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.补充:第三种…

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…

【算法题】一种字符串压缩表示的解压(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;展望未来的趋势和…

nginx编译安装及配置文件的修改

编译安装nginx 1.关闭防火墙&#xff0c;安全机制&#xff0c;去官网下载nginx压缩包&#xff0c;并进行解压 systemctl stop firewalld #关闭防火墙 systemctl disable --now firewalld #开机不自启并立即关闭防火墙 setenforce 0 #关闭安全机制 2.安装依赖包&#xff0…

CSU计算机学院2023秋C语言期中题目思路分享(前三道题)

文章目录 写在前面A&#xff1a;个税计算——阅读理解与数据类型转换原题输入输出样例输入样例输出 题目分析题目理解代码实现与问题解决 我的代码 B&#xff1a;时制转换——问题是一点点解决的原题输入输出样例输入样例输出 题目分析我的代码 C&#xff1a;统计进位——人教版…

编程语言分类

如果要将编程语言分成两大类&#xff0c;可以考虑以下分类方式&#xff1a; 编译型语言&#xff08;Compiled Languages&#xff09;&#xff1a;这类语言在运行之前需要通过编译器将源代码转换为机器码或类似形式的可执行代码。编译型语言的特点包括&#xff1a; 需要显式的编…

用PHP与html做一个简单的登录页面

用PHP与html做一个简单的登录页面 login.html的设计 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

我一人全干!之二,vue3后台管理系统树形目录的实现。

一个完整的后台管理系统需要一个树形结构的目录&#xff0c;方便用户切换页面。 因为使用的是element-plus的ui库&#xff0c;所以首选el-menu组件&#xff0c;点击查看文档。 因为此组件不是树形结构的&#xff0c;所以需要封装成系统需要的树形结构组件。可以使用vue的递归组…

Vue3 Element-Plus 一站式生成动态表单:简化前端开发流程

文章目录 1. 引言2. Vue3 和 Element-Plus 简介2.1 Vue32.2 Element-Plus 3. 动态表单的需求与挑战4. Vue3 和 Element-Plus 动态表单的优势4.1 Vue3的组合式API4.2 Element-Plus的表单组件 5. 一站式生成动态表单的实现5.1 准备工作5.2 创建动态表单组件5.3 使用动态表单组件 …