摘要:数据量较少时,速度几乎没有区别,无所谓选择哪一个。数据量大的情况下,的总体表现最好,但序列化不如而中,如果只是一个对象,可以直接使用用法为默认采用内置方式进格式化后返回。
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, data=None, x=100 * 10000): if not data: data = default_data squashed = serial(data) return (ttt(serial, data, x), ttt(deserial, squashed, x)) def test(serial, deserial, 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.ucloud.cn/yun/42571.html
摘要:阿里云安装脚本安装脚本两个脚本可以任选其一,速度都非常不错。推荐的加速器有和阿里云。阿里云不同平台的镜像加速方法配置可以参考的官方文档。以上便是的安装方式说明。上一篇文章网络爬虫实战爬虫框架的安装下一篇文章网络爬虫实战部署相关库 上一篇文章:Python3网络爬虫实战---11、爬虫框架的安装:ScrapySplash、ScrapyRedis下一篇文章:Python3网络爬虫实战---...
摘要:的解析器实现更成熟,第三方库质量高解析器尽管已经有了很大的性能提升和很多新的功能,但是从源代码实现的角度来说,基本上是通过在源代码上打来增加功能的。相对而言,解析器更成熟,也比较稳定。 最近在考虑学习一门后端语言,在ruby和python直接犹豫,然后自己做了一些对比,希望能帮到有同样问题的你。 一、异同对比选择1、Python和ruby的相同点: 都强调语法简单,都具有更一般的表达...
摘要:请注意,在版本号之前有个字符。理论上,次版本号的变化并不会影响向后兼容性。虽然可以通过命令关闭在版本号前面使用的默认行为,但这个只会影响顶级依赖关系。 本文作者对比了当前主流的包管理工具npm、yarn、pnpm之间的区别,并提出了合适的使用建议,以下为译文: NPM npm是Node.js能够如此成功的主要原因之一。npm团队做了很多的工作,以确保npm保持向后兼容,并在不同的环境中...
摘要:解析器在解析的时候实际上是依赖于解析器的,它除了支持标准库中的解析器,还支持一些第三方的解析器比如,下面我们对支持的解析器及它们的一些优缺点做一个简单的对比。 上一篇文章:Python3网络爬虫实战---28、解析库的使用:XPath下一篇文章:Python3网络爬虫实战---30、解析库的使用:PyQuery 前面我们介绍了正则表达式的相关用法,但是一旦正则写的有问题,可能得到的就...
阅读 1830·2021-09-22 15:55
阅读 3523·2021-09-07 10:26
阅读 630·2019-08-30 15:54
阅读 686·2019-08-29 16:34
阅读 841·2019-08-26 14:04
阅读 3260·2019-08-26 11:47
阅读 2135·2019-08-26 11:33
阅读 2296·2019-08-23 15:17