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

在 Python3 中使用 JSON

在 Python3版本中使用 JSON

本教程将会教我们如何使用 Python 编程语言编码和解码 JSON。

环境

在python3中(以及python2.6版本后的python2版本)内置了JSON模块,无需额外安装另外的JSON模块。

简介

JSON模块是python内置的用来进行python对象序列化和反序列化的模块。

序列化,指将python对象转换为json格式的数据流,反序列化则是将json格式的数据流转换为python对象。

该模块中常用的方法有以下四个:

  • ​json.dump​  将Python对象序列化为Json格式的数据流并写入文件类型的对象中
  • ​json.dumps​  将Python对象序列化为Json格式的字符串
  • ​json.load​  从文件类型的对象中读取Json格式的数据并反序列化成Python对象
  • ​json.loads ​ 将包含Json格式数据的字符串反序列化成Python对象
两个dump函数是将python对象转换为json,可以理解为编码(类似demjson的encode函数),两个load函数是将json转换为python对象,可以理解为JSON解析(类似demjson的code函数)。因为两个dump和两个load的功能相似,所以小编只介绍其中一个(介绍JSON格式数据的字符串的编码与解析,也就是dumps和loads函数)。

json.dumps()

dumps可以传递的参数如下:

json.dumps(obj,  skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False)

在日常使用中,更多的情况我们只传递必须的obj参数(这是一个对象),其他参数为可选参数,下表是该函数的所有参数的作用:

 参数 作用
 ​obj​(必选项) 要序列化的python对象
 skipkeys=False 是否跳过要序列化的对象中字典元素的key不是基本类型的数据;
如果为 True,则跳过,如果为 False,将抛出 TypeError异常。
 ​ensure_ascii=True 是否将要序列化的对象中的字符串中的非ascii字符进行转义。

如果该参数为True,则将字符串中的非ascii字符转义成unicode字符串,否则,将不会进行转义。

 ​check_circular=True 是否进行容器类型的循环引用检查。

如果该参数设置为False,则不进行检查,但是可能会引发 OverflowError或更严重的情况。

如果该参数设置为True,则将进行容器类型的循环引用检查,并在发现循环引用时抛出异常。

 ​allow_nan=True 是否允许序列化超出范围的float 类型的值(如float('inf') 、float('-inf') 、float('nan') )。

如果该参数设置为True,则上面列出的那些值将依次使用JavaScript中等价的值( Infinity-Infinity、 NaN)来进 行替代;

如果该参数设置为False,并且要序列化的对象中出现了那些超出范围的值,则将引发ValueError异常。

 ​indent=None 是否在数组元素和对象成员前增加缩进以便使格式更加美观。

如果该参数设置为大于等于1的整数,则添加换行符和对应数量的空格表示缩进,如果设置为0,则表示只添加换行符,如果设置为 None,则表示无缩进。

 ​separators=None 设置Json中各项之间、对象的键和值之间的分隔符;

该参数必须是一个2元组,元组第一个元素表示Json数据中各项之间的分隔符,元组的第二个元素表示Json对象的键和值之间的分隔符。默认的分隔符为(’,’, ‘:’)

 ​default=None 指定一个函数,用来将不可进行序列化的Python对象转化为可序列化的Python对象。
 cls=None 指定一个定制的JSONEncoder 的子类(例如,重写了.default() 方法用来序列化附加的类型),指定该参数时请使用cls 关键字参数。如果未指定该参数,则将使用默认的JSONEncoder 。
 sort_keys=False 是否要将对象中字典元素按照key进行排序。

默认为False,即不进行排序,若指定为 True,则会进行排序。

举个简单的例子:

#!/usr/bin/python3
import json
# Python 字典类型转换为 JSON 对象
data = {'no' : 1,'name' : 'W3CSchool','url' : 'http://www.w3cschool.cn'
}
json_str = json.dumps(data)
print ("Python 原始数据:", repr(data))
print ("JSON 对象:", json_str)

python对象转化为JSON字符串的时候遵循以下转换规则:

PythonJson
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

json.loads()

loads可以传递的参数如下:

json.loads(s,encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None)

在日常使用中,更多的情况我们只传递必须的s参数(这是一个字符串),其他参数为可选参数,下表是该函数的所有参数的作用:

 参数 作用
 ​s​(必选项) 要反序列化的JSON字符串
encoding=None 该参数已弃用,将会被忽略
cls=None 指定一个定制的JsonDecoder 子类,以便实现特定的反序列化需求;
object_hook=None

接受一个可调用对象,用于处理解码后生成的Python对象中​dict​类型的值。

注意,这个处理过程是递归进行的,即返回的Python对象内部所有的字典结构都将被这个方法处理

 parse_float=None

用于处理解码后的Python对象中的float类型的值。

 ​parse_int=None 接受一个可调用对象,用于处理解码后的Python对象中的int 类型的值。
 parse_constant=None接受一个可调用对象,用于解码时对 Infinity、 -Infinity、 NaN或其他非法的Json数值的处理。
 ​object_parse_hook=None 如果指定了该参数并且设置为一个可调用对象,那么Json对象将被解码成一个元素为二元组的列表,二元组的两个元素分别为Json对象中的键值对的键和值,并且列表中元素的顺序与Json对象中键值对的顺序一致。

举个简单的例子:

#!/usr/bin/python3
import json
# Python 字典类型转换为 JSON 对象
data1 = {'no' : 1,'name' : 'W3CSchool','url' : 'http://www.w3cschool.cn'
}json_str = json.dumps(data1)
print ("Python 原始数据:", repr(data1))
print ("JSON 对象:", json_str)# 将 JSON 对象转换为 Python 字典
data2 = json.loads(json_str)
print ("data2['name']: ", data2['name'])
print ("data2['url']: ", data2['url'])

与序列化的过程类似,JSON转化为python对象也遵循一定的规则:

JsonPython
objectdict
arraylist
stringstr
number(int)int
number(real)float
trueTrue
falseFalse
nullNone

相关文章:

在 Python3 中使用 JSON

在 Python3版本中使用 JSON 本教程将会教我们如何使用 Python 编程语言编码和解码 JSON。 环境 在python3中(以及python2.6版本后的python2版本)内置了JSON模块,无需额外安装另外的JSON模块。 简介 JSON模块是python内置的用来进行pytho…...

图神经网络GNN介绍

目录标题图神经网络基础图基本模块定义图的邻接矩阵点特征的更新(重构)多层GNN图卷积GCN模型GCN基本思想网络层数:基本计算图注意力机制graph attention networkT-GCN序列图神经网络图相似度图神经网络基础 图基本模块定义 三个特征&#x…...

【面试】TCP、UDP、Socket、HTTP网络编程面试题

文章目录什么是网络编程网络编程中两个主要的问题网络协议是什么为什么要对网络协议分层计算机网络体系结构1 TCP / UDP1.1 什么是TCP/IP和UDP1.2 TCP与UDP区别:1.3 TCP和UDP的应用场景:1.4 形容一下TCP和UDP1.5 运行在TCP 或UDP的应用层协议分析。什么是…...

Python语言的文件读写

🥑高级语言有很多共同之处,在文件读写这一部分我们就可以类比着之前我们过的C语言的文件读写的操作进行处理。 🥑还记得我们C语言当中的文件进行操作时所需要的哪些步骤吗?文件打开,文件读/写操作,文件关闭。我们的Py…...

面向对象 ( 上 )

Java面向对象 ( 上 ) 观看b站尚硅谷视频做的笔记 1、 面向过程 (POP) 与面向对象 (OOP) 2、类和对象 2.1、Java 类及类的成员 属性:对应类中的成员变量 行为:对应类中的成员方法。 2.2、类与对象的创建及使用 一、设计类,就是设计类的…...

Node.js学习笔记——会话控制

一、介绍 所谓会话控制就是对会话进行控制 HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户 而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题 常见的会话控制技术有三种&a…...

tsconfig.json参数详解

tsconfig.json是ts编译器的配置文件,ts编译器可以根据他的信息来对代码进行编译。 想要学习这篇文章小伙伴,可以先去看看下面文章,可以明白tsconfig.json的由来以及如何编译: 在vscode中使用Typescript并运行_typescript vscode…...

Pyecharts Geo绘制可视化地图并展示坐标位置

文章目录 Pyecharts Geo绘制可视化地图安装需要的模块绘制出地图生成空白地图修改参数,调整地图输出格式地图上展示坐标位置输入坐标点将坐标点添加入系列并配置系列完整代码参考文献Pyecharts Geo绘制可视化地图 安装需要的模块 pip install pyecharts绘制出地图 生成空白…...

什么是Hbuilder?--前端工具IDE

一,简介HBuilder 1.1HBuilder HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE。HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写。它基于Eclipse,所以顺其自然地兼容了Eclipse的插件从Fron…...

07-centos-更改数据源、打补丁、查看内核

本文主要是介绍linux-centos的常用操作 更改数据源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 查看内核 [rootcentos02 ~]# uname -a Linux centos02 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 …...

flac格式如何转mp3,3种简单方法值得收藏

flac格式如何转mp3?mp3是小伙伴们所熟知的音频格式,相信flac格式也一定有小伙伴知道,它是一种无损音频压缩格式,是目前流行的数字音乐文件格式之一。那么为什么要将flac格式转换成mp3格式呢,这里小编就给大家讲一讲fla…...

停车位 蓝桥杯模拟

【问题描述】 小蓝要在路边划分停车位。 他将路边可停车的区域划分为L个整数小块,编号1至L。一个车位需要连续的K 个小块,停车位不能重 叠。有的小块属于井盖、消防通道等区域,不能停车。 请问小蓝最多划分出多少个停车位? 【输入…...

ftrace使用实战

诉求:遇到一个问题 echo blocked > /sys/class/block/sdb/device/state 报非法参数,想要知道根因,但是对这块内核代码不熟悉,不知道从哪里下手,那就先用ftrace看看内核调用栈,如下所示。 rootrlk:/home…...

【C#进阶】C# 不安全代码

序号系列文章20【C#进阶】C# 泛型21【C#进阶】C# 匿名方法22【C#进阶】C# 多线程文章目录前言1、什么是不安全代码?2、如何编译不安全代码?3、指针类型4、指针执行的运算符和语句5、固定大小的缓冲区6、函数指针7、不安全代码的总结结语前言 &#x1f4d…...

Docker安装部署ElasticSearch

1.部署单点ElasticSearch 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让ElasticSearch和kibana容器互联。这里先创建一个网络: docker network create es-net1.2.拉取镜像 考虑到ElasticSearch的兼容性,这里ElasticSearch、kiba…...

【新2023Q2模拟题JAVA】华为OD机试 - 快递业务站

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:快递业务站 题目 快递业务范…...

OpenCV入门(二十四)快速学会OpenCV 23 傅里叶变换

OpenCV入门(二十四)快速学会OpenCV 23 傅里叶变换1.傅里叶变换理论概述2.Numpy实现傅里叶变换2.1 傅里叶变换2.2 傅里叶逆变换2.3 高通滤波3.OpenCV实现傅里叶变换3.1 实现傅里叶变换3.2 实现傅里叶逆变换3.3 低通滤波作者:Xiou 1.傅里叶变换…...

线段树合并

前置知识:权值线段树,动态开点。 引入 我们先来看一道题: 永无乡包含 nnn 座岛,给出每座岛的重要度的排名,名次用 111 到 nnn 来表示。一开始有 mmm 条边连接,接下来有 qqq 次操作。操作分两种&#xff…...

研发效能 | DevOps如何改变游戏公司工作方式?

如果你是游戏开发者,那么在过去几年里,你可能会觉得有人给了你一把双刃剑。 整个行业不断蓬勃发展,但玩家的预期值也越来越高。玩家们总是希望游戏体验能够更快、更真实、更具创造性。此外,他们还希望能够定期推出新的游戏和更新…...

Mongo聚合和Springboot整合Mongo聚合

聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。 语法格式:db.集合名称.aggregate({管道:{表达式}}) 常用管道如下: $group: 将集合中的⽂…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

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

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

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

pam_env.so模块配置解析

在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...