(数据科学学习手札137)orjson:Python中最好用的json库

虚幻大学 xuhss 129℃ 0评论

? 优质资源分享 ?

学习路线指引(点击解锁) 知识定位 人群定位
? Python实战微信订餐小程序 ? 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
?Python量化交易实战? 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

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

format,png - (数据科学学习手札137)orjson:Python中最好用的json库
  而本文我要给大家介绍的第三方jsonorjson,在公开的各项基准性能测试中,以数倍至数十倍的性能优势碾压jsonujsonrapidjsonsimplejson等其他Python库,且具有诸多额外功能,下面我们就来领略其常用方法吧~

2 orjson常用方法

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

2.1 序列化

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

c7eafd74c844a59c072d81c8143a5bd6 - (数据科学学习手札137)orjson:Python中最好用的json库

2.2 反序列化

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

dd38b98fa47529be33f09fed9240cd79 - (数据科学学习手札137)orjson:Python中最好用的json库

2.3 丰富的option选项

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

  • OPT_INDENT_2

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

01d0f1e537b51c6a0bbe074e366fd547 - (数据科学学习手札137)orjson:Python中最好用的json库

  • OPT_OMIT_MICROSECONDS

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

88e7489e1a8883b2e81aba1e0d7b3a0a - (数据科学学习手札137)orjson:Python中最好用的json库

  • OPT_NON_STR_KEYS

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

8bcf516e2421111f23c8e32a51c8e40e - (数据科学学习手札137)orjson:Python中最好用的json库

  • OPT_SERIALIZE_NUMPY

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

b9619c55018b495bfcf5d96132259c94 - (数据科学学习手札137)orjson:Python中最好用的json库

  • OPT_SERIALIZE_UUID

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

a5229948723cc4ab60f8c74f44f381ce - (数据科学学习手札137)orjson:Python中最好用的json库

  • OPT_SORT_KEYS

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

6be881e2757ed266779fad573752a393 - (数据科学学习手札137)orjson:Python中最好用的json库

  • 组合多种option

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

86409e8c222097ae0d22672611d84327 - (数据科学学习手札137)orjson:Python中最好用的json库

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

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

d3369a6409b9755d05cec47771f4a2dc - (数据科学学习手札137)orjson:Python中最好用的json库
  类似的,针对datetime类型数据,我们同样可以配合OPT_PASSTHROUGH_DATETIME和自定义default函数实现日期自定义格式化转换:

995f9b7f6771fb48d74d4b1ba8f24f2f - (数据科学学习手札137)orjson:Python中最好用的json库
  orjson更多特性可前往官方仓库https://github.com/ijl/orjson了解更多~


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

转载请注明:xuhss » (数据科学学习手札137)orjson:Python中最好用的json库

喜欢 (0)

您必须 登录 才能发表评论!