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

 更新时间:2022年06月06日 10:01:53   作者:代码输入中...  
orjson是一个用于python的快速、正确的json库,它的基准是 json最快的python库,具有全面的单元、集成和互操作性测试,下面这篇文章主要给大家介绍了关于Python中最好用的json库orjson用法的相关资料,需要的朋友可以参考下

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 函数实现日期自定义格式化转换:

总结

到此这篇关于Python中最好用的json库orjson用法的文章就介绍到这了,更多相关Python中json库orjson内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python xlwt模块的使用解析

    python xlwt模块的使用解析

    这篇文章主要介绍了python xlwt模块的使用解析,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • Python如何通过地址获取变量

    Python如何通过地址获取变量

    这篇文章主要介绍了Python如何通过地址获取变量,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python中循环依赖问题及其解决方案

    Python中循环依赖问题及其解决方案

    在软件开发中,循环依赖是一个常见的问题,尤其是在使用 Python 这样的动态语言时,循环依赖指的是两个或多个模块或组件相互依赖,形成一个闭环,本文将探讨 Python 中循环依赖的问题,并提供一些解决方案,需要的朋友可以参考下
    2024-06-06
  • 4种方法python批量修改替换列表中元素

    4种方法python批量修改替换列表中元素

    这篇文章主要介绍了4种python批量替换列表中元素方法,需要的朋友可以参考下
    2022-04-04
  • Python json格式化打印实现过程解析

    Python json格式化打印实现过程解析

    这篇文章主要介绍了Python json格式化打印实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Pandas实现一列数据分隔为两列

    Pandas实现一列数据分隔为两列

    这篇文章主要介绍了Pandas实现一列数据分隔为两列,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)

    python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)

    Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。下面这篇文章主要给大家介绍了python爬虫之HTML文本的解析库BeautifulSoup的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • pandas使用get_dummies进行one-hot编码的方法

    pandas使用get_dummies进行one-hot编码的方法

    今天小编就为大家分享一篇pandas使用get_dummies进行one-hot编码的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果

    详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果

    这篇文章主要介绍了Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python教程之成员和身份运算符的用法详解

    Python教程之成员和身份运算符的用法详解

    身份运算符是python用来判断的两个对象的存储单元是否相同的一种运算符号。Python的成员运算符是“是否包含运算符”,主要应用在字符串或者集合中。本文将通过示例聊聊二者的使用,需要的可以参考一下
    2022-09-09

最新评论