Python JSON解码性能

Jam*_*tin 45 python json python-2.6

我正在使用jsonPython 2.6中的模块来加载和解码JSON文件.但是我目前的表现比预期慢.我正在使用一个6MB大小的测试用例,json.loads()需要20秒.

我以为该json模块有一些本机代码来加速解码?

如何检查是否正在使用?

作为比较,我下载并安装了python-cjson模块,并且cjson.decode()在相同的测试用例中花了1秒钟.

我宁愿使用Python 2.6提供的JSON模块,因此我的代码用户不需要安装其他模块.

(我正在Mac OS X上开发,但我在Windows XP上得到了类似的结果.)

Ivo*_*lka 30

新的Yajl - 又一个JSON库非常快.

yajl        serialize: 0.180  deserialize: 0.182  total: 0.362
simplejson  serialize: 0.840  deserialize: 0.490  total: 1.331
stdlib json serialize: 2.812  deserialize: 8.725  total: 11.537
Run Code Online (Sandbox Code Playgroud)

您可以自己比较这些库.

更新: UltraJSON更快.


A. *_*ady 23

它可能因平台而异,但内置的json模块基于simplejson,不包括C加速.我发现simplejson无论如何都要像python-cjson一样快,所以我更喜欢它,因为它显然具有与内置相同的接口.

try:
    import simplejson as json
except ImportError:
    import json
Run Code Online (Sandbox Code Playgroud)

在我看来,这是一段时间内最好的习惯用语,在向前兼容时可以获得性能.

  • 不再.许多新的json模块更快. (2认同)

Tom*_*mas 17

我正在解析相同的文件10倍.文件大小为1,856,944字节.

Python 2.6:

yajl        serialize: 0.294  deserialize: 0.334  total: 0.627
cjson       serialize: 0.494  deserialize: 0.276  total: 0.769
simplejson  serialize: 0.554  deserialize: 0.268  total: 0.823
stdlib json serialize: 3.917  deserialize: 17.508 total: 21.425
Run Code Online (Sandbox Code Playgroud)

Python 2.7:

yajl        serialize: 0.289  deserialize: 0.312  total: 0.601
cjson       serialize: 0.232  deserialize: 0.254  total: 0.486
simplejson  serialize: 0.288  deserialize: 0.253  total: 0.540
stdlib json serialize: 0.273  deserialize: 0.256  total: 0.528
Run Code Online (Sandbox Code Playgroud)

不确定为什么数字与您的结果不成比例.我猜,新的图书馆?

  • 原因很简单:在Python 2.7中添加了json的C加速.从发行说明:"更新的模块:json模块升级到simplejson包的2.0.9版本,其中包括一个C编码和解码更快的C扩展." http://docs.python.org/dev/whatsnew/2.7.html (4认同)
  • +1非常有价值的数字托马斯.所以2.7修复了一切. (3认同)

TON*_*y.W 14

看看UltraJSON https://github.com/esnme/ultrajson

这里我的测试(代码来自:https://gist.github.com/lightcatcher/1136415)

平台:OS X 10.8.3 MBP 2.2 GHz Intel Core i7

JSON:

simplejson == 3.1.0

蟒蛇-cjson == 1.0.5

jsonlib == 1.6.1

ujson == 1.30

yajl == 0.3.5

JSON Benchmark
2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)]
-----------------------------
ENCODING
simplejson: 0.293394s
cjson: 0.461517s
ujson: 0.222278s
jsonlib: 0.428641s
json: 0.759091s
yajl: 0.388836s

DECODING
simplejson: 0.556367s
cjson: 0.42649s
ujson: 0.212396s
jsonlib: 0.265861s
json: 0.365553s
yajl: 0.361718s
Run Code Online (Sandbox Code Playgroud)