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

orjson:一个功能丰富的高性能PythonJSON库_0

时间:2023-03-12 09:02:28 科技观察

简介首先,我们了解一下orjson的优缺点:datetime,日期和时间实例可以序列化为RFC3339格式,例如:“2022-06-12T00:00:00+00:00”序列化numpy.ndarray实例比其他库快4-12倍,但占用内存少,约为其他库的1/3,输出速度比标准库快10到20倍序列化的结果是bytes类型,而不是str。序列化str时,不会将unicode转义为ASCII。float序列化速度是其他库的10倍,反序列化速度是其他库的2倍。直接序列化str、int、list和dict的子类不提供load()和dump()方法。在原生JSON库中,load()方法可以将json格式的文件转换成python对象序列化dataclass类型@dataclasses.dataclassclass对象:id:int名称:str成员:typing.List[Member]print(orjson.dumps(Object(1,"a",[Member(1,True),Member(2)])))输出是:b'{"id":1,"name":"a","members":[{"id":1,"active":true},{"id":2,"active":false}]}'serializefloaterjson序列化和反序列化双精度浮点数而不损失精度。序列化NaN,Infinity,-Infinity时,会返回null。>>>导入o??rjson、ujson、rapidjson、json>>>orjson。dumps([float("NaN"),float("Infinity"),float("-Infinity")])b'[null,null,null]'>>>ujson.dumps([float("NaN"),浮动(“无限”),浮动(“-无限”)])-Infinity")])'[NaN,Infinity,-Infinity]'>>>json.dumps([float("NaN"),float("Infinity"),float("-Infinity")])'[NaN,Infinity,-Infinity]的序列化Int类型orjson可以对整数进行序列化和反序列化。但是浏览器只支持53位整数,超过53位就会产生JSONEncodeError。>>>importorjson>>>orjson.dumps(9007199254740992)b'9007199254740992'>>>orjson.dumps(9007199254740992,option=orjson.OPT_STRICT_INTEGER)JSONEncodeError:Integerexceeds53-bitrange>>>orjson.dumps9(-9204074),option=orjson.OPT_STRICT_INTEGER)JSONEncodeError:Integerexceeds53-bitrangenumpy序列化numpy数据需要设置option=orjson.OPT_SERIALIZE_NUMPY。>>>importorjson,numpy>>>orjson.dumps(numpy.array([[1,2,3],[4,5,6]]),option=orjson.OPT_SERIALIZE_NUMPY,)b'[[1,2,3],[4,5,6]]'strorjson只处理UTF-8格式的字符串。如果将UTF-16字符串传递给orjson.dumps()方法,则会报错。>>>importorjson>>>orjson.dumps('\ud800')JSONEncodeError:strisnotvalidUTF-8:surrogatesnotalloweduuidorjson可以将uuid.UUID实例序列化为RFC4122格式。>>>importorjson,uuid>>>orjson.dumps(uuid.UUID('f81d4fae-7dec-11d0-a765-00a0c91e6bf6'))b'"f81d4fae-7dec-11d0-a765-00a0c91e6bf6"'>>>orjson.dumps(uuid.uuid5(uuid.NAMESPACE_DNS,"python.org"))b'"886313e1-3b8a-5372-9b90-0c9aee199e5d"'安装orjson支持3.7-3.10所有版本的64位Python,注意32位Python不能使用orjson!本文将在3.8.2环境下使用orjson,使用如下命令安装orjson:pipinstall--upgrade"pip>=20.3"pipinstall--upgradeorjson使用基本用法我们首先使用orjson序列化一个字典,然后结果反序列化:importorjson,datetime,numpydata={"type":"job","created_at":datetime.datetime(2022,6,12),"status":"

最新推荐
猜你喜欢