摘要:數(shù)據(jù)量較少時(shí),速度幾乎沒有區(qū)別,無所謂選擇哪一個。數(shù)據(jù)量大的情況下,的總體表現(xiàn)最好,但序列化不如而中,如果只是一個對象,可以直接使用用法為默認(rèn)采用內(nèi)置方式進(jìn)格式化后返回。
python中json的序列化與反序列化有很多庫,具體選擇使用哪一個,或者哪一個速度更快呢?
先上結(jié)果
json序列化與反序列化速度對比(按總時(shí)間排序:測試數(shù)據(jù)100 * 10000) ujson 序列化: 2.084 反序列化: 1.157 總時(shí)間: 3.241 yajl 序列化: 1.910 反序列化: 1.970 總時(shí)間: 3.880 cjson 序列化: 3.305 反序列化: 1.328 總時(shí)間: 4.632 simplejson 序列化: 10.279 反序列化: 4.658 總時(shí)間: 14.937 stdlib json 序列化: 7.013 反序列化: 8.594 總時(shí)間: 15.607
其中,除了stdlib json也就是內(nèi)置的json.dumps外,其他都是第三方包。數(shù)據(jù)量較少時(shí),速度幾乎沒有區(qū)別,無所謂選擇哪一個。數(shù)據(jù)量大的情況下,ujson的總體表現(xiàn)最好,但序列化不如yajl
而django中,如果只是response一個json對象,可以直接使用JsonResonse
用法為:
>>> from django.http import JsonResponse >>> response = JsonResponse({"foo": "bar"}) >>> response.content "{"foo": "bar"}"
默認(rèn)采用內(nèi)置方式進(jìn)json格式化后返回。如果數(shù)據(jù)不多,著實(shí)方便(django1.7引入)
測試代碼
來自rtyler,在其基礎(chǔ)上新增了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))
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42571.html
摘要:阿里云安裝腳本安裝腳本兩個腳本可以任選其一,速度都非常不錯。推薦的加速器有和阿里云。阿里云不同平臺的鏡像加速方法配置可以參考的官方文檔。以上便是的安裝方式說明。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬蟲框架的安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)部署相關(guān)庫 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---11、爬蟲框架的安裝:ScrapySplash、ScrapyRedis下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---...
摘要:的解析器實(shí)現(xiàn)更成熟,第三方庫質(zhì)量高解析器盡管已經(jīng)有了很大的性能提升和很多新的功能,但是從源代碼實(shí)現(xiàn)的角度來說,基本上是通過在源代碼上打來增加功能的。相對而言,解析器更成熟,也比較穩(wěn)定。 最近在考慮學(xué)習(xí)一門后端語言,在ruby和python直接猶豫,然后自己做了一些對比,希望能幫到有同樣問題的你。 一、異同對比選擇1、Python和ruby的相同點(diǎn): 都強(qiáng)調(diào)語法簡單,都具有更一般的表達(dá)...
摘要:請注意,在版本號之前有個字符。理論上,次版本號的變化并不會影響向后兼容性。雖然可以通過命令關(guān)閉在版本號前面使用的默認(rèn)行為,但這個只會影響頂級依賴關(guān)系。 本文作者對比了當(dāng)前主流的包管理工具npm、yarn、pnpm之間的區(qū)別,并提出了合適的使用建議,以下為譯文: NPM npm是Node.js能夠如此成功的主要原因之一。npm團(tuán)隊(duì)做了很多的工作,以確保npm保持向后兼容,并在不同的環(huán)境中...
摘要:解析器在解析的時(shí)候?qū)嶋H上是依賴于解析器的,它除了支持標(biāo)準(zhǔn)庫中的解析器,還支持一些第三方的解析器比如,下面我們對支持的解析器及它們的一些優(yōu)缺點(diǎn)做一個簡單的對比。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---28、解析庫的使用:XPath下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---30、解析庫的使用:PyQuery 前面我們介紹了正則表達(dá)式的相關(guān)用法,但是一旦正則寫的有問題,可能得到的就...
閱讀 1829·2021-09-22 15:55
閱讀 3521·2021-09-07 10:26
閱讀 628·2019-08-30 15:54
閱讀 684·2019-08-29 16:34
閱讀 839·2019-08-26 14:04
閱讀 3258·2019-08-26 11:47
閱讀 2134·2019-08-26 11:33
閱讀 2294·2019-08-23 15:17