快捷搜索:  汽车  科技

pythonjson文件比较(Python中几种常用json库性能对比)

pythonjson文件比较(Python中几种常用json库性能对比)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): sta

pythonjson文件比较(Python中几种常用json库性能对比)(1)

无论是在Web开发还是服务端开发,json格式都是相当常见的数据传输格式,一般情况下我们对于json的解析构造性能并不需要太多关心,除非是数据量很大或者性能要求较高的系统交互中。

在Python中json的序列化与反序列化有很多库,具体选择使用哪一个,或者哪一个速度更快呢?下面我们对5种常见的库进行对比:

  • ujson
  • yajl
  • cjson
  • simplejson
  • stdlib json

测试方式:

pythonjson文件比较(Python中几种常用json库性能对比)(2)

测试结论:

  • 1.stdlib json也就是内置的json.dumps外,其他都是第三方包。
  • 2.数据量较少时,速度几乎没有区别,无所谓选择哪一个。
  • 3.数据量大的情况下,ujson的总体表现最好,但序列化不如yajl

原文来自技术90分,欢迎订阅,获取更多技术文章、资源分享

在django中,如果只是response一个json对象,可以直接使用JsonResonse

用法为:

>>> from django.http import JsonResponse >>> response = JsonResponse({'Foo': 'bar'}) >>> response.content '{"foo": "bar"}'

默认采用内置stdlib方式进行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))

猜您喜欢: