IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Python中最好用的json库 -> 正文阅读

[大数据]Python中最好用的json库

1 简介

大家好,我们在日常使用?Python?的过程中,经常会使用?json?格式存储一些数据,尤其是在?web?开发中。而?Python?原生的?json?库性能差、功能少,只能堪堪应对简单轻量的?json?数据存储转换需求。

而本文我要给大家介绍的第三方?json?库?orjson?,在公开的各项基准性能测试中,以数倍至数十倍的性能优势碾压?json?、?ujson?、?rapidjson?、?simplejson?等其他?Python?库,且具有诸多额外功能,下面我们就来领略其常用方法吧~

2 orjson常用方法

orjson?支持?3.7?到?3.10?所有版本64位的?Python?,本文演示对应的?orjson?的版本为?3.7.0?,直接使用?pip install -U orjson?即可完成安装。下面我们来对?orjson?中的常用方法进行演示:

2.1 序列化

与原生?json?库类似,我们可以使用?orjson.dumps()?将?Python?对象序列化为?JSON?数据,注意,略有不同的是,?orjson?序列化的结果并不是?str?型而是?bytes?型,在下面的例子中,我们对包含一千万个简单字典元素的列表进行序列化,?orjson?与?json?库的耗时比较如下:

2.2 反序列化

将?JSON?数据转换为?Python?对象的过程我们称之为反序列化,使用?orjson.loads()?进行操作,可接受?bytes?、?str?型等常见类型,在前面例子的基础上我们添加反序列化的例子:

2.3 丰富的option选项

在?orjson?的序列化操作中,可以通过参数?option?来配置诸多额外功能,常用的有:

  • OPT_INDENT_2

通过配置?option=orjson.OPT_INDENT_2?,我们可以为序列化后的?JSON?结果添加2个空格的缩进美化效果,从而弥补其没有参数?indent?的不足:

  • OPT_OMIT_MICROSECONDS

orjson.dumps()?可以直接将?Python?中?datetime?、?time?等标准库中的日期时间对象转换成相应的字符串,这是原生?json?库做不到的,而通过配置?option=orjson.OPT_OMIT_MICROSECONDS?,可以将转换结果后缀的毫秒部分省略掉:

  • OPT_NON_STR_KEYS

当需要序列化的对象存在非数值型键时,?orjson?默认会抛出?TypeError?错误,这时需要配置?option=orjson.OPT_NON_STR_KEYS?来强制将这些键转换为字符型:

  • OPT_SERIALIZE_NUMPY

orjson?的一大重要特性是其可以将包含?numpy?中数据结构对象的复杂对象,兼容性地转换为?JSON?中的数组,配合?option=orjson.OPT_SERIALIZE_NUMPY?即可:

  • OPT_SERIALIZE_UUID

除了可以自动序列化?numpy?对象外,?orjson?还支持对?UUID?对象进行转换,在?orjson 3.0?之前的版本中,需要配合?option=orjson.OPT_SERIALIZE_UUID?,而本文演示的?3.X?版本则无需额外配置参数:

  • OPT_SORT_KEYS

通过配合参数?option=orjson.OPT_SORT_KEYS?,可以对序列化后的结果自动按照键进行排序:

  • 组合多种option

当你的序列化操作需要涉及多种?option?功能时,则可以使用?|?运算符来组合多个?option?参数即可:

2.4 针对dataclass、datetime添加自定义处理策略

当你需要序列化的对象中涉及到?dataclass?自定义数据结构时,可以配合?orjson.OPT_PASSTHROUGH_DATACLASS?,再通过对?default?参数传入自定义处理函数,来实现更为自由的数据转换逻辑,譬如下面简单的例子中,我们可以利用此特性进行原始数据的脱敏操作:

类似的,针对?datetime?类型数据,我们同样可以配合?OPT_PASSTHROUGH_DATETIME?和自定义?default?函数实现日期自定义格式化转换:

以上就是本文的全部内容,欢迎在评论区与我进行讨论~

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-08 19:06:49  更:2022-06-08 19:08:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:34:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码