当前位置: 首页 > 科技观察

一个Python值得学习的第三方JSON库_0

时间:2023-03-15 22:28:00 科技观察

在我们日常使用Python的过程中,经常会使用json格式来存储一些数据,尤其是在web开发中。但是Python原生的json库性能差,功能少,只能应付简单轻量的json数据存储转换需求。这篇文章要给大家介绍的第三方json库orjson,碾压了json、ujson、rapidjson、simplejson等其他Python库,附加了很多功能,一起来看看它的常用方法吧~orjson常用methodsorjson支持从3.7到3.10的所有64位Python版本。本文演示对应的orjson版本为3.7.0,直接使用pipinstall-Uorjson即可完成安装。下面演示一下orjson中常用的方法:1.序列化类似于原生的json库。我们可以使用orjson.dumps()将Python对象序列化为JSON数据。注意一点点不同的是,orjson序列化的结果不是str类型而是bytes类型。在下面的示例中,我们序列化了一个包含1000万个简单字典元素的列表。orjson和json库的耗时比较如下:2.反序列化JSON将数据转换为Python对象的过程称为反序列化。使用orjson.loads()进行操作。可以接受常见类型,例如bytes和str。在前面例子的基础上,我们将增加反序列化的例子:3.丰富的option选项在orjson的序列化操作中,可以通过参数option配置很多额外的功能。常用的有:(1)OPT_INDENT_2通过配置option=orjson.OPT_INDENT_2,我们可以在序列化的JSON结果中加入2个参数空格的缩进美化效果可以弥补参数indent的不足:(2)OPT_OMIT_MICROSECONDSorjson。dumps()可以直接将Python中的datetime、time等标准库中的datetime对象转换成对应的字符串,这是原生的json库做不到的,但是通过配置option=orjson.OPT_OMIT_MICROSECONDS,后缀的毫秒部分转换结果可以省略:(3)OPT_NON_STR_KEYS当待序列化的对象有非数字key时,orjson默认会抛出TypeError错误,需要配置option=orjson.OPT_NON_STR_KEYS强制将这些key转换为字符类型:(4)OPT_SERIALIZE_NUMPYorjson一个重要的特点是可以将numpy中包含数据结构对象的复杂对象以兼容的方式转换为JSONarr中的数组ay可以和option=orjson.OPT_SERIALIZE_NUMPY一起使用:(5)OPT_SERIALIZE_UUID除了自动序列化numpy对象,orjson还支持UUID对象的转换。orjson3.0之前的版本需要option=orjson.OPT_SERIALIZE_UUID,而本文演示的3.X版本不需要额外的配置参数:(6)OPT_SORT_KEYS通过配合参数option=orjson.OPT_SORT_KEYS,可以将序列化后的结果自动按照key进行排序:(7)组合多个options当你的序列化操作需要涉及到多个option函数时,可以使用|operatortoCombinemultipleoptionparameters:4.添加dataclass和datetime的自定义处理策略当需要序列化涉及dataclass自定义数据结构的对象时,可以配合orjson.OPT_PASSTHROUGH_DATACLASS,然后从Defineprocessingfunctions传入默认参数到实现更自由的数据转换逻辑。比如下面这个简单的例子,我们可以利用这个特性对原始数据进行脱敏处理:同样,对于datetime类型的数据,我们也可以配合OPT_PASSTHROUGH_DATETIME和自定义默认函数实现日期自定义格式转换:对于orjson的更多特性,请到官方仓库https://github.com/ijl/orjson了解更多。