Python中最好用的json库orjson用法详解

作者:代码输入中... 时间:2023-06-13 23:11:49 

1 简介

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

Python中最好用的json库orjson用法详解

而本文我要给大家介绍的第三方 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 库的耗时比较如下:

Python中最好用的json库orjson用法详解

2.2 反序列化

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

Python中最好用的json库orjson用法详解

2.3 丰富的option选项

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

  • OPT_INDENT_2

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

Python中最好用的json库orjson用法详解

  • OPT_OMIT_MICROSECONDS

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

Python中最好用的json库orjson用法详解

  • OPT_NON_STR_KEYS

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

Python中最好用的json库orjson用法详解

OPT_SERIALIZE_NUMPY

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

Python中最好用的json库orjson用法详解

  • OPT_SERIALIZE_UUID

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

Python中最好用的json库orjson用法详解

  • OPT_SORT_KEYS

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

Python中最好用的json库orjson用法详解

  • 组合多种option

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

Python中最好用的json库orjson用法详解

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

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

Python中最好用的json库orjson用法详解

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

Python中最好用的json库orjson用法详解

来源:https://blog.csdn.net/m0_59485658/article/details/125138257

标签:Python,json库,orjson
0
投稿

猜你喜欢

  • Bootstrap Table快速完美搭建后台管理系统

    2024-05-09 09:48:16
  • Python实现变声器功能(萝莉音御姐音)

    2023-04-12 23:04:16
  • 透明数据加密(TDE)库的备份和还原

    2012-07-21 14:44:08
  • python实现计算器小功能

    2022-07-15 04:33:56
  • Django如何使用redis作为缓存

    2022-12-30 19:19:20
  • js加密页面代码生成器

    2007-10-12 13:40:00
  • 浅谈python量化 双均线策略(金叉死叉)

    2022-05-28 02:21:58
  • Python 如何读取字典的所有键-值对

    2021-05-21 10:06:53
  • 几个javascript显示加载进度条代码

    2008-01-19 10:52:00
  • Vue动态组件component标签的用法大全

    2024-05-29 22:28:33
  • SQL语句练习实例之六 人事系统中的缺勤(休假)统计

    2011-11-03 17:15:55
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    2024-01-14 17:25:04
  • mysql查询表是否被锁的方法

    2024-01-19 13:16:41
  • 利用Python绘制数据的瀑布图的教程

    2023-03-09 02:33:42
  • pytorch 更改预训练模型网络结构的方法

    2022-04-02 04:41:19
  • 基于Python实现射击小游戏的制作

    2021-05-02 17:13:48
  • 操作Dom节点实现间歇滚动新闻

    2009-10-16 20:51:00
  • Python import自己的模块报错问题及解决

    2023-11-09 15:57:08
  • Discuz7 的提示效果如何实现

    2010-01-13 13:10:00
  • Python实现列表删除重复元素的三种常用方法分析

    2022-02-17 20:21:36
  • asp之家 网络编程 m.aspxhome.com