python中经常会遇到处理JSON格式数据的情况,在程序中使用这类数据越多,就会面临编码或解码的问题。处理JSON数据,python内置的工具也不错,但是还有比这更多更好的选择。选择哪一个库或工具包,没有标准答案,但一般的选择标准或要求还是有一些共同点的。首先是要求处理速度快,但对于不同的使用场景、不同的人,专门处理JSON的库的用法也是不一样的;其次,追求速度快,并不是唯一的要求,还要考虑安全性和可定制等。
选择处理JSON数据速度最快的库,要首先确定速度如何度量,用什么样的度量标准,如何选取其他条件或要求等,下面就这一问题从四个方面来具体讲述。
如果python内置的处理JSON数据的工具包,没有明显的瓶颈,则没有必要考虑另外选择,判断的条件就是耗费在JSON数据编码的时间是否超过了程序使用者或编程者的预期,例如JSON数据编码的进程耗时超过整个CPU占用时间的25%,而处理速度仅仅提高了30%,并且在程序多次运行中,这类数据几乎达到最高值,那就可以认为,所使用的JSON处理工具在当前场景下遇到了瓶颈,可以考虑尝试其他同类工具。
根据数据的构成和处理方法选择JSON工具包
选择更合适的JSON处理库或工具包,要考虑当前的程序环境中是否有编码或解码或两者都有的需求、要处理的数据信息的量是否很大、数据信息的构成是什么样等。看看下面一个日志数据的例子,数据特性较少,需要编码:
{
"timestamp": 1556283673.1523004,
"task_uuid": "0ed1a1c3-050c-4fb9-9426-a7e72d0acfc7",
"task_level": [1, 2, 1],
"action_status": "started",
"action_type": "main",
"key": "value",
"another_key": 123,
"and_another": ["a", "b"],
}
选择JSON工具包的其他条件
程序运行的性能是个广泛的概念,也是优缺点平衡的结果,并不是所有各方面达到最优,因此选择处理JSON数据的库或工具包,还应考虑以下几个因素:
- 安全性/健壮性:以上面的日志数据格式为例,日志信息包括来自不信任源的信息,如果JSON库或工具包处理这类数据出现故障,那么这样的工具可靠性或安全性就不是太好;
- 定制编码:针对要处理的数据可以自己指定编码方式或方法,可以实现不同类型的python对象的序列化,有些JSON工具包或库支持这种技术方法,有的不支持;
- 跨平台:所选的JSON数据处理工具或库是否可以在linux、windows或macOS上使用;
- 提供维护:选择的JSON数据处理工具或库要有人持续的维护
根据个人经验,现在常见的JSON数据处理工具包或库有四个:orjson, rapidjson, ujson 和 hyperjson,其中ujson虽然有人维护,但并不是很积极,而hyperjson只适用于macOS操作系统,相比之下,orjson和rapidjson比较合适。
orjson和rapidjson的用例
以下是orjson和rapidjson的使用实例,
m = {
"timestamp": 1556283673.1523004,
"task_uuid": "0ed1a1c3-050c-4fb9-9426-a7e72d0acfc7",
"task_level": [1, 2, 1],
"action_status": "started",
"action_type": "main",
"key": "value",
"another_key": 123,
"and_another": ["a", "b"],
}
def benchmark(name, dumps):
start = time.time()
for i in range(1000000):
dumps(m)
print(name, time.time() - start)
benchmark("Python", json.dumps)
# orjson 只输出字节, 但是通常情况下要使用unicode编码:
benchmark("orjson", lambda s: str(orjson.dumps(s), "utf-8"))
benchmark("rapidjson", rapidjson.dumps)
输出结果如下:
$ python jsonperf.py
Python 4.829106330871582
orjson 1.0466396808624268
rapidjson 2.1441543102264404
如果考虑到unicode解码的需要,那orjson的处理速度最快;从现在的使用情况看,使用orjson的用户要比rapidjson的用户少,orjson也没有被Conda纳入,安装时要自己打包,略有不便,总之可以肯定:orjson 是处理JSON数据最快的工具包,但是否需要,还是要看自己的选择或需求。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/76321
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!