python中5个json库的速度对比
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.jianshu.com/p/c90f5b471e99
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
python中5个json库的速度对比的更多相关文章
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- Python中导入第三方声源库Acoular的逻辑解释以及Acoular的下载
[声明]欢迎转载,但请保留文章原始出处→_→ 秦学苦练:http://www.cnblogs.com/Qinstudy/ 文章来源:http://www.cnblogs.com/Qinstudy/p/ ...
- 使用ctypes在Python中调用C++动态库
使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...
- Python中使用模块和库编程
""" python中使用模块和库编程 导入模块 import modulename [as alias] from modulename import fun1,fun ...
- python 历险记(四)— python 中常用的 json 操作
目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...
- python中精确输出JSON浮点数的方法
有时需要在JSON中使用浮点数,比如价格.坐标等信息.但python中的浮点数相当不准确, 例如下面的代码: 复制代码代码如下: #!/usr/bin/env python import json a ...
- python接口自动化(九)--python中字典和json的区别(详解)
简介 这篇文章的由来是由于上一篇发送post请求的接口时候,参数传字典(dict)和json的缘故,因为python中,json和dict非常类似,都是key-value的形式,为啥还要这么传参,在群 ...
- python中字典和json的区别
python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转 定义 python中,json和dict非常类似,都是k ...
- python中eval()和json.dumps的使用
在python中通过requests.get(url)获取json数据,此时可能需要eval进行解析. # -*- coding: utf-8 -*- import requests r = requ ...
随机推荐
- React中配置Sass引入.scss文件无效
React中配置Sass引入.scss文件无效 在react中使用sass时,引入.scss文件失效尝试很多方法没法解决,最终找到解决方法,希望能帮助正在坑里挣扎的筒子~ 在node_modules文 ...
- js中的生成器函数
入门 简单来说,用法如下: function* fn() { console.log(1); //暂停! yield; //调用next方法继续执行 console.log(2); } var ite ...
- XMPP实现原理
XMPP协议简介 XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messagi ...
- 利用 TCMalloc 优化 Nginx 的性能
TCMalloc 全称为 Thread-Caching Malloc,是谷歌的开源工具 google-perftools 的成员,它可以 在内存分配效率和速度上高很多,可以很大程度提高服务器在高并发情 ...
- Ansible 管理Windows 受控端
- 【转】Linux下的磁盘分区方法
转自:https://www.cnblogs.com/lbole/p/8904298.html 一.硬盘接口类型 硬盘的接口主要有IDE.SATA.SCSI .SAS和光纤通道等五种类型.其中IDE和 ...
- 费用流+SPFA ||Luogu P3381【模板】最小费用最大流
题面:[模板]最小费用最大流 代码: #include<cstdio> #include<cstring> #include<iostream> #include& ...
- react:如何创建一个新项目
如何用react创建一个新的项目 我们打开react官网:https://reactjs.org/docs/create-a-new-react-app.html 看到以下命令 npx create- ...
- SpringBoot2 Filter执行两次问题解决
原因:在请求指定url之外还请求了/favicon.ico 地址 过滤掉问题就解决了 @Overridepublic void doFilter(ServletRequest request, Ser ...
- QQ输入法用户评价
1.用户界面 用户界面简洁,并且可以随用户喜好自己更换,人性化,优化性比较大 2.记住用户选择 当输入一个字时,下一次输入这个拼音第一位的字就是上一次,或者使用次数最多的字.假如所使用的的字在后边,输 ...