加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python中5个json库的速度对比

发布时间:2020-12-20 12:53:29 所属栏目:Python 来源:网络整理
导读:python中json的序列化与反序列化有很多库,具体选择使用哪一个,或者哪一个速度更快呢? 先上结果 json序列化与反序列化速度对比(按总时间排序:测试数据100 * 10000) ujson 序列化: 2 .084 反序列化: 1 .157 总时间: 3 .241 yajl 序列化: 1 .910 反序列化

python中json的序列化与反序列化有很多库,具体选择使用哪一个,或者哪一个速度更快呢?

先上结果

json序列化与反序列化速度对比(按总时间排序:测试数据100 * 10000) ujson 序列化: 2.084 反序列化: 1.157 总时间: 3.241 yajl 序列化: 1.910 反序列化: 1.970 总时间: 3.880 cjson 序列化: 3.305 反序列化: 1.328 总时间: 4.632 simplejson 序列化: 10.279 反序列化: 4.658 总时间: 14.937 stdlib json 序列化: 7.013 反序列化: 8.594 总时间: 15.607 

其中,除了stdlib json也就是内置的json.dumps外,其他都是第三方包。数据量较少时,速度几乎没有区别,无所谓选择哪一个。数据量大的情况下,ujson的总体表现最好,但序列化不如yajl

而django中,如果只是response一个json对象,可以直接使用JsonResonse

用法为:

>>> from django.http import JsonResponse >>> response = JsonResponse({‘foo‘: ‘bar‘}) >>> response.content ‘{"foo": "bar"}‘ 

默认采用内置方式进json格式化后返回。如果数据不多,着实方便(django1.7引入)

测试代码

来自rtyler,在其基础上新增了ujson

import time import pickle import yajl try: import cjson except ImportError: cjson = None try: import simplejson except ImportError: simplejson = None try: import ujson except ImportError: ujson = None try: import json except ImportError: json = None default_data = { "name": "Foo","type": "Bar","count": 1,"info": { "x": 203,"y": 102,},} def ttt(f,data=None,x=100 * 10000): start = time.time() while x: x -= 1 foo = f(data) return time.time() - start def profile(serial,deserial,x=100 * 10000): if not data: data = default_data squashed = serial(data) return (ttt(serial,data,x),ttt(deserial,squashed,x)) def test(serial,data=None): if not data: data = default_data assert deserial(serial(data)) == data contenders = [ (‘yajl‘,(yajl.Encoder().encode,yajl.Decoder().decode)),] if cjson: contenders.append((‘cjson‘,(cjson.encode,cjson.decode))) if simplejson: contenders.append((‘simplejson‘,(simplejson.dumps,simplejson.loads))) if json: contenders.append((‘stdlib json‘,(json.dumps,json.loads))) if ujson: contenders.append((‘ujson‘,(ujson.dumps,ujson.loads))) for name,args in contenders: test(*args) x,y = profile(*args) print("%-11s serialize: %0.3f deserialize: %0.3f total: %0.3f" % ( name,x,y,x + y))
作者:二二向箔 链接:https://www.jianshu.com/p/c90f5b471e99 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读