Python 2.6 JSON 解码性能

45 投票
7 回答
37779 浏览
提问于 2025-04-15 11:04

我在用Python 2.6的json模块来加载和解码JSON文件。不过,我发现它的速度比我预期的要慢。我用的测试案例文件有6MB大,而json.loads()的解码时间居然要20秒。

我以为json模块应该有一些原生代码来加速解码呢?

我该怎么检查这个功能是否被使用了呢?

为了做个对比,我下载并安装了python-cjson模块,结果cjson.decode()在同样的测试案例下只花了1秒钟。

我更希望使用Python 2.6自带的JSON模块,这样我的代码用户就不需要额外安装其他模块了。

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

7 个回答

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

使用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

我不太明白为什么你的结果和这些数字差别这么大。我猜是因为使用了更新的库?

31

新的 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

你可以 自己比较这些库

更新: UltraJSON 甚至更快。

23

这可能因平台而异,但内置的 json 模块是基于 simplejson 的,并没有包含 C 语言的加速功能。不过我发现 simplejson 的速度和 python-cjson 一样快,所以我更喜欢使用它,因为它的接口和内置的 json 模块是一样的。

try:
    import simplejson as json
except ImportError:
    import json

在我看来,这种写法在一段时间内都是最好的选择,它在有性能提升的情况下能发挥作用,同时又能向后兼容。

撰写回答