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 json

data = {
    '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 json

data = {
    '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 json

json_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模块的详细说明。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka使用指南

Kafka简介架构设计Kafka的架构设计关键概念Kafka的架构设计关键机制 Partition介绍Partition工作机制 应用场景ACK机制介绍ACK机制原理ACK机制对性能的影响ACK控制粒度Kafka分区数对集群性能影响调整分区优化集群性能拓展Kafka数据全局有序 Kafka简介 Kafka是由Apache软件基金…

Spring Boot学习随笔-SpringBoot的引言,回顾传统SSM开发

学习视频:【编程不良人】2021年SpringBoot最新最全教程 第一章、传统SSM开发回顾以及问题 Spring SpringMVC Mybatis SSM 实现一个简单功能 员工添加、查询… SSM项目简单实现 项目 需求分析 —>概要设计 —>(库表设计) —> 详细…

Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)

冯诺依曼体系结构: 我们常见的计算机,如笔记本。我们常见的计算机,服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成: 中央处理器(CPU)&am…

MIT6.5840-2023-Lab1: MapReduce

前置知识 MapReduce:Master 将一个 Map 任务或 Reduce 任务分配给一个空闲的 worker。 Map阶段:被分配了 map 任务的 worker 程序读取相关的输入数据片段,生成并输出中间 k/v 对,并缓存在内存中。 Reduce阶段:所有 ma…

Linux socket编程(12):Unix套接字之socketpair、sendmsg和recvmsg详解

在上一篇文章Unix套接字编程及通信例子中,我们对Unix套接字编程有一个基本的了解。但在Unix套接字编程的领域中,有一组特殊而强大的工具:socketpair、sendmsg 和 recvmsg,它们为实现本地进程间通信提供了便捷的方式。 文章目录 1 …

python二维数组创建赋值问题:更改单个值却更改了所有项的值

test_list [] dic1 {} test_list [dic1 for _ in range(3)] ll [1, 2, 3]for i in range(3):test_list[i][value] ll[i]print(test_list)运行结果:每次赋值都更改了所有项 原因:python的二位数据创建方式就是这样,官方文档中有描述Wha…

大话数据结构-查找-线性索引查找

注:本文同步发布于稀土掘金。 4 线性索引查找 4.1 概述 索引就是把一个关键字与它对应的记录相关联的过程,一个索引由若干个索引项构成,每个索引项至少应包含关键字和其对应的记录在存储器中的位置等信息。 索引按照结构可分为线性索引、树…

【SpringBoot】在SpringBoot中配置序列化的Redis

文章目录 前言展示包结构在SpringBoot中配置Redis测试总结 前言 在使用Java操作Redis时,如果不对Redis进行序列化操作,可能会导致存储的key和value与原来的数据不一致的问题 本文也借此机会来详细讲解一下SpringBoot中配置序列化Redis的步骤 展示包结构 …

AI助力智慧农业,基于YOLOv7【tiny/yolov7/yolov7x】开发构建不同参数量级农田场景下庄稼作物、杂草智能检测识别系统

智慧农业随着数字化信息化浪潮的演变有了新的定义,在前面的系列博文中,我们从一些现实世界里面的所见所想所感进行了很多对应的实践,感兴趣的话可以自行移步阅读即可: 《自建数据集,基于YOLOv7开发构建农田场景下杂草…

绘图 Seaborn 10个示例

绘图 Seaborn 是什么安装使用显示中文及负号散点图箱线图小提琴图堆叠柱状图分面绘图分类散点图热力图成对关系图线图直方图 是什么 Seaborn 是一个Python数据可视化库,它基于Matplotlib。Seaborn提供了高级的绘图接口,可以用来绘制各种统计图形&#xf…

nodejs+vue+微信小程序+python+PHP新闻发布系统的设计与实现-计算机毕业设计推荐

根据现实需要,此系统我们设计出一下功能,主要有以下功能模板。 (1)新闻发布系统前台:首页、时事新闻、公告资讯、个人中心。 (2)管理员功能:首页、个人中心、用户管理、新闻分类管理…

文本编辑软件:Ulysses mac介绍说明

Ulysses mac是面向 Mac、iPhone 和 iPad 的一站式写作环境。Ulysses 提供令人愉悦、专注的写作体验,加上高效文稿管理、无缝同步以及灵活导出。markdown 可以直接对于文本进行不同类型的分类、编辑,比如标题、注解、评论之类的内容。 Ulysses让注意力专…

rpm安装gitlab

1.rpm包下载 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 2.进行安装 rpm -ivh gitlab-ce-15.9.7-ce.0.el7.x86_64.rpm --nodeps --force 3.配置访问地址 vim /etc/gitlab/gitlab.rb 4.重新加载配置以及重启服务 gitlab-ctl reconfiguregitlab-ctl resta…

Ubuntur编译ROS报错:error PCL requires C++14 or above

ubuntu20.04 编译ROS包 报错: error: PCL requires C14 or above: 修改Cmakelists.txt文件: set(CMAKE_CXX_STANDARD 14) 再次编译成功.

2023 IoTDB 用户大会成功举办,深入洞察工业互联网数据价值

2023 年 12 月 3 日,中国通信学会作为指导单位,Apache IoTDB Community、清华大学软件学院、中国通信学会开源技术委员会联合主办,“科创中国”开源产业科技服务团和天谋科技(北京)有限公司承办的 2023 IoTDB 用户大会…

AI 绘画 | Stable Diffusion 动漫人物真人化

前言 如何让一张动漫人物变成真实系列人物?Stable Diffusion WebUI五步即可实现。快来使用AI绘画打开异世界的大门吧!!! 动漫真人化 首先在图生图里上传一张二次元动漫人物图片,然后选择一个真实系人物画风的大模型,最后点击DeepBooru 反推,自动填充提示词,调整重绘…

【MySQL】:数据库基本认识

数据库基础 一.什么是数据库1.mysql是什么2.为什么要有数据库3.服务器,数据库,表关系4.Mysql架构5.SQL语句分类 二.存储引擎 一.什么是数据库 1.mysql是什么 1.mysql是数据库服务的客户端。 2.mysqld是数据库服务的服务器端。 3.mysql本质:基…

【Python】logging模块函数详解和示例

在Python中,LOGGER通常是指一个用于记录日志的模块或对象。它可以帮助你在程序中跟踪和记录事件,以便于调试、错误跟踪和日志分析。Python的标准库中包含了一个名为logging的模块,它提供了一个灵活且功能强大的日志记录系统。本文对相应的函数…

unity 2d 入门 飞翔小鸟 下坠功能且碰到地面要停止 刚体 胶囊碰撞器 (四)

1、实现对象要受重力 在对应的图层添加刚体 改成持续 2、设置胶囊碰撞器并设置水平方向 3、地面添加盒状碰撞器 运行则能看到小鸟下坠并落到地面上

【南京站-EI会议征稿中】第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)

第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024) 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024&…