赖勇浩(http://laiyonghao.com)

注:不是逐句翻译,如有困惑,参详原文(http://pushingtheweb.com/2011/03/ultra-fast-json-encoding-decoding-python/)。

在 ESN,我们大量使用 JSON,Python 2.6 自带的那个太慢,所以我们后来使用 simplejson。今时今日 JavaScript 和 JSON 更广泛地使用了,所以我觉得可能这是一个值得我用 C 去优化的领域,而且也可以正明我宝刀未老。

UltraJSON

我花了一个周末来研究一下 JSON 编码,并把我结果称为 UltraJSON,从目前我做的初步的基准测试来看,他是我能找到的所有 JSON 编解码器中最快的(如果不是,那我可以把它优化得更快!)。

Python 绑定

其实 UltraJSON 并非只能用于特定语言,只是为了方便我的同事使用,我就实现了它的 Python 绑定,称为 ujson 模块。
更新:UltraJSON 现在可以在 PyPI 中找到了,包名叫 ujson,用 easy_install 或 pip 可以很方便地安装它,你懂的。

当前基准测试

64位 Linux 基准测试

Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56)
OS Version: Ubuntu 10.10
System Type: x64-based PC
Processor: Intel(R) Core(TM) i5-2300 CPU @ 2.80GHz
Total Physical Memory: 4096 MB

Array with 256 utf-8 strings:
ujson encode      : 2874.54652 calls/sec
simplejson encode : 1539.47999 calls/sec
cjson encode      : 132.33571 calls/sec

ujson decode      : 2072.09417 calls/sec
cjson decode      : 991.20903 calls/sec
simplejson decode : 310.75309 calls/sec

Medium complex object:
ujson encode      : 19001.01929 calls/sec
simplejson encode : 3512.29205 calls/sec
cjson encode      : 3063.69959 calls/sec

ujson decode      : 12791.80993 calls/sec
cjson decode      : 8288.32916 calls/sec
simplejson decode : 6640.22169 calls/sec

Array with 256 strings:
ujson encode      : 40161.78453 calls/sec
simplejson encode : 19301.40779 calls/sec
cjson encode      : 12337.13166 calls/sec

ujson decode      : 36944.81317 calls/sec
cjson decode      : 30187.40167 calls/sec
simplejson decode : 25105.56562 calls/sec

Array with 256 doubles:
ujson encode      : 6054.71950 calls/sec
simplejson encode : 2912.44353 calls/sec
cjson encode      : 3539.51228 calls/sec

ujson decode      : 27794.29735 calls/sec
cjson decode      : 14892.38775 calls/sec
simplejson decode : 14879.00070 calls/sec

Array with 256 True values:
ujson encode      : 168086.95325 calls/sec
simplejson encode : 49348.93309 calls/sec
cjson encode      : 67392.90623 calls/sec

ujson decode      : 139359.25968 calls/sec
cjson decode      : 82552.26652 calls/sec
simplejson decode : 114998.51396 calls/sec

Array with 256 dict{string, int} pairs:
ujson encode      : 24125.68837 calls/sec
simplejson encode : 5751.74871 calls/sec
cjson encode      : 4735.65147 calls/sec

ujson decode      : 17176.70493 calls/sec
cjson decode      : 13420.93963 calls/sec
simplejson decode : 9854.27352 calls/sec

Dict with 256 arrays with 256 dict{string, int} pairs:
ujson encode      : 86.52449 calls/sec
simplejson encode : 17.46117 calls/sec
cjson encode      : 18.31323 calls/sec

ujson decode      : 49.54660 calls/sec
cjson decode      : 38.34094 calls/sec
simplejson decode : 28.18035 calls/sec

More on GitHub

很期待看到有人使用这个项目,更赞的是贡献代码,所以来我的 GitHub 仓库(https://github.com/jskorpan/ultrajson)看看吧。
你要是把它绑定到更多语言就真的是酷毙了!

UltraJSON——Python 的极速 JSON 编解码器相关推荐

  1. 在python中使用json格式存储数据

    在python中使用json格式存储数据 代码如下: import jsonlist1 = [{'A': [1, 2, 3, 4, 5, 6], 'B': [3, 4, 5, 6, 7]},{'C': ...

  2. Python 生成 JWT(json web token) 及 解析方式

    一.关于 jwt 的原理及概念可以自行在网络上搜索了解一下,这里推荐一篇写的比较好的博客 深入了解Json Web Token之概念篇 另附 JWT 的官方文档: https://jwt.io/int ...

  3. python json.loads()中文问题-Python实现的json文件读取及中文乱码显示问题解决方法...

    本文实例讲述了Python实现的json文件读取及中文乱码显示问题解决方法.分享给大家供大家参考,具体如下: city.json文件的内容如下: { "cities": [ { & ...

  4. python中文编码-python中文编码与json中文输出问题详解

    前言 python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 ...

  5. python序列化模块json和pickle

    序列化相关 1. json 应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转 ...

  6. python 笔记 pickle json

    1  数据序列化 文件系统,机器学习,大数据等,都少不了数据文件.Python 提供了一些比较方便序列化的存储的组件. 什么是序列化(Serialization)呢,就是把像字典,列表这类的数据,打包 ...

  7. python 编码文件json.loads json.dumps

    python 编码文件json.loads json.dumps import yaml d = {'name': '张三', 'age': '1'} print d jd = json.dumps( ...

  8. python中的JSON到底怎么用?

    前言 最近在学习python爬虫,在对数据进行持久化存储的时候,会选择使用json格式的数据进行存储,由此就引发了一个问题,python中的JSON库到底咋用? 以前使用JavaScript中Json ...

  9. 详解Python中的JSON以及在Python中使用JSON

    首先什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱,即JavaScript对象表示法) 是一种用于表示结构化数据的流行数据格式.      在服务器 ...

最新文章

  1. Git 经常使用命令总结
  2. java过滤器api_springboot集成过滤器
  3. 注解版poi操作工具
  4. 一文理解接口和抽象类
  5. 不小心执行了rm-rf,除了跑路,如何恢复?
  6. newaxis取出某一行或列数据以及增加维度
  7. 【声源定位】基于matlab不同空间谱估计的声源定位算法比较【含Matlab源码 545期】
  8. IOMMU之Interrupt Remapping
  9. 如何用pe安装服务器系统安装系统教程视频,微pe安装系统教程视频
  10. 《锋利的JQuery》notes
  11. 笔试的图形推理题怎么做?
  12. sql安装过程中,为 SQL Server 代理服务提供的凭据无效。若要继续操作,请为 SQL
  13. Typecho插件:根据自定时间自动切换主题
  14. WPS中插入“公式”后行距不正常的解决办法
  15. 彼得·林奇的成功投资
  16. 网站SEO过程中的死链处理
  17. 计算机英语口语app,最实用五大英语口语app,强烈推荐
  18. [大数据技术] 淘宝双11数据分析与预测实验
  19. qq2007服务器中断,自动重启pubwin2007服务器脚本
  20. Dubbo监控中心的介绍与安装

热门文章

  1. 将ios内的文件导入mac
  2. spring security鉴权
  3. 20220327解决elsevier latex模板作者单位报错
  4. 我的电磁学讲义13:电磁感应定律
  5. wifi卡慢延迟高_卡顿缓冲真头疼 这几招能加速你的WiFi
  6. java中的取模和取余_取模运算
  7. c语言自动转汇编,怎么将c语言转变为汇编语言
  8. 微商培训不会告诉你的10个秘密,来看真正的实战
  9. windows下用户变量和系统变量
  10. java混淆工具proguard_proguard最新版下载|