python中的json是什么东西,python和json
Orjson是一个快速正确的python JSON库。它的基准是最快的python库,具有全面的单元、集成和互操作性测试。下面这篇文章主要介绍Python中最好的json库orjson的用法的相关信息。有需要的可以参考一下。
00-1010 1简介2 orjson常用方法2.1序列化2.2反序列化2.3丰富的option选项2.4为dataclass和datetime添加自定义处理策略的总结
目录
大家好。在Python的日常使用中,我们经常使用json格式来存储一些数据,尤其是在web开发中。但是Python的原生json库性能差,功能少,只能满足简单轻量的json数据存储和转换的要求。
本文要给大家介绍的第三方json库orjson,在各种公开的基准性能测试中,以数倍到数十倍的性能优势碾压了json、ujson、rapidjson、simplejson等Python库,并拥有众多附加功能。来看看它的常用方法吧~
1 简介
Orjson支持从3.7到3.10的所有64位Python版本。本文演示了orjson的对应版本是3.7.0,所以可以使用pip install -U orjson直接安装。让我们演示一下orjson中的常用方法:
2 orjson常用方法
与原生json库类似,我们可以使用orjson.dumps()将Python对象序列化为json数据。注意orjson序列化的结果不是str类型而是bytes类型。在下面的例子中,我们序列化了一个包含一千万个简单字典元素的列表。orjson和json库的时间消耗比较如下:
2.1 序列化
将JSON数据转换成Python对象的过程称为反序列化。我们使用orjson.loads()进行操作,可以接受bytes、str等常见类型。在前面例子的基础上,我们添加反序列化的例子:
2.2 反序列化
在orjson的序列化操作中,可以通过parameter选项配置很多额外的功能。常用的有:
通过配置option=orjson实现OPT_INDENT_2。OPT_INDENT_2,我们可以给序列化的JSON结果增加2个空格的缩进美化效果,从而弥补其参数INDENT的不足:
opt _ omit _ microsecondsorjson . dumps()可以直接将Python中的datetime、time等标准库中的Datetime对象转换成相应的字符串,这些字符串
是原生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内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。