在 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字符进行转义。 如果该参数为 | |||
check_circular=True | 是否进行容器类型的循环引用检查。 如果该参数设置为 如果该参数设置为 | |||
allow_nan=True | 是否允许序列化超出范围的float 类型的值(如float('inf') 、float('-inf') 、float('nan') )。 如果该参数设置为 如果该参数设置为 | |||
indent=None | 是否在数组元素和对象成员前增加缩进以便使格式更加美观。 如果该参数设置为大于等于1的整数,则添加换行符和对应数量的空格表示缩进,如果设置为 | |||
separators=None | 设置Json中各项之间、对象的键和值之间的分隔符; 该参数必须是一个2元组,元组第一个元素表示Json数据中各项之间的分隔符,元组的第二个元素表示Json对象的键和值之间的分隔符。默认的分隔符为(’,’, ‘:’) | |||
default=None | 指定一个函数,用来将不可进行序列化的Python对象转化为可序列化的Python对象。 | |||
cls=None | 指定一个定制的JSONEncoder 的子类(例如,重写了.default() 方法用来序列化附加的类型),指定该参数时请使用cls 关键字参数。如果未指定该参数,则将使用默认的JSONEncoder 。 | |||
sort_keys=False | 是否要将对象中字典元素按照key进行排序。 默认为 | |||
举个简单的例子:
#!/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字符串的时候遵循以下转换规则:
| Python | Json |
|---|---|
| dict | object |
| list, tuple | array |
| str | string |
| int, float | number |
| True | true |
| False | false |
| None | null |
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对象中 注意,这个处理过程是递归进行的,即返回的Python对象内部所有的字典结构都将被这个方法处理 | |||
parse_float=None | 用于处理解码后的Python对象中的 | |||
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对象也遵循一定的规则:
| Json | Python |
|---|---|
| object | dict |
| array | list |
| string | str |
| number(int) | int |
| number(real) | float |
| true | True |
| false | False |
| null | None |
相关文章:
在 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、不安全代码的总结结语前言 Ὅ…...
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 次操作。操作分两种ÿ…...
研发效能 | DevOps如何改变游戏公司工作方式?
如果你是游戏开发者,那么在过去几年里,你可能会觉得有人给了你一把双刃剑。 整个行业不断蓬勃发展,但玩家的预期值也越来越高。玩家们总是希望游戏体验能够更快、更真实、更具创造性。此外,他们还希望能够定期推出新的游戏和更新…...
Mongo聚合和Springboot整合Mongo聚合
聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。 语法格式:db.集合名称.aggregate({管道:{表达式}}) 常用管道如下: $group: 将集合中的⽂…...
无片外电容的LDO电路设计手册:完整IP现成电路,包含过温与过流保护、带隙与BUFFER,性能...
无片外电容LDO电路设计 完整IP现成电路,具有过温保护和过流保护,带隙,BUFFER都有 性能指标已流片验证 同时有相关文献、各模块电路功能分析简化计算笔记,适合学习入门不适合纵向可以附赠一些自己学习时觉得比较有帮助的资料。 有好…...
FastAPI系列 4 - 模块化路由的艺术:APIRouter实战指南
1. 为什么需要模块化路由? 第一次用FastAPI开发电商后台时,我把所有路由都堆在main.py里。三个月后这个文件膨胀到2000多行代码,每次修改用户认证逻辑都要在订单处理和商品列表的代码块之间来回翻找。这种经历让我深刻理解了为什么APIRouter会…...
OpenClaw Exec Approvals 机制:在安全与效率之间寻找平衡
OpenClaw Exec Approvals 机制:在安全与效率之间寻找平衡当你第一次看到 /approve 弹窗时,是选择 allow-once 还是 allow-always?这个看似简单的决定,背后是安全与便利的永恒博弈。引言 在 Agent 开发和工作流自动化的世界里&…...
在CentOS上部署RustDesk私有中继服务器:从零搭建到安全配置
1. 环境准备:搭建RustDesk私有中继服务器的基石 在CentOS系统上部署RustDesk私有中继服务器,首先需要确保基础环境配置正确。我遇到过不少因为环境问题导致的部署失败案例,所以这部分我会详细说明每个环节的注意事项。 1.1 系统更新与基础依赖…...
I.MX6U-MINI开发板系统固化全流程:从uboot编译到rootfs烧录(附网络配置技巧)
I.MX6U-MINI开发板系统固化实战指南:从零构建到网络调优 第一次拿到I.MX6U-MINI开发板时,面对系统固化的多个环节总有种无从下手的感觉。作为嵌入式Linux开发的入门门槛,系统固化不仅关系到后续应用开发的基础环境,更是理解嵌入式…...
Ostrakon-VL终端效果展示:深夜食堂风格终端打印输出全过程录屏
Ostrakon-VL终端效果展示:深夜食堂风格终端打印输出全过程录屏 1. 像素特工终端概览 在零售与餐饮行业的数字化转型浪潮中,我们开发了这款基于Ostrakon-VL-8B多模态大模型的Web交互终端。与传统工业级UI不同,我们采用了高饱和度的像素艺术风…...
Qwen Pixel Art企业级应用:游戏公司美术外包降本提效实战路径
Qwen Pixel Art企业级应用:游戏公司美术外包降本提效实战路径 1. 游戏美术外包的痛点与机遇 游戏开发中,美术资源制作往往占据大量成本和时间。传统像素美术外包存在三个核心痛点: 成本高:资深像素画师日薪通常在800-1500元&am…...
NXP S32K3开发日记:PIT0的RTI唤醒功能调试全记录(含时钟源配置误区)
NXP S32K3开发实战:PIT0 RTI唤醒功能深度解析与排错指南 作为一名长期深耕汽车电子领域的嵌入式工程师,最近在基于NXP S32K3系列MCU开发低功耗应用时,遇到了一个颇具挑战性的问题——如何可靠地使用PIT0的RTI(Real Time Interrupt…...
实战开发:基于快马AI为mc jc服务器快速生成定制化空岛生存玩法插件
今天想和大家分享一个实战案例:如何用InsCode(快马)平台为我的MC JC服务器快速开发一个定制化的空岛生存玩法插件。整个过程比想象中顺利很多,特别适合需要快速迭代玩服的服主们。 需求分析阶段 空岛生存模式需要解决四个核心问题:初始环境生…...
ROS与Webots协同开发:舵轮底盘运动控制实战解析
1. 舵轮底盘的核心原理与结构设计 舵轮底盘作为全向移动机器人的核心部件,其独特之处在于每个轮子都具备独立转向和驱动的能力。这种设计使得机器人能够在平面内实现任意方向的平移和旋转,完全突破了传统差速底盘的运动限制。我曾在物流AGV项目中实测过&…...
