一、前言
最近發現一些小伙伴使用eval來處理json,而且為了能夠將json成功轉為字典而不報錯,還寫了如下的賦值操作 (因為json中空為null,假為false,真為true與Python的表達不一樣,如果不進行下面代碼的賦值,用eval轉換就會報錯):
null=None
false=False
true=True
其實Python的標準庫中有處理json的庫,就叫json,比如要把json字串轉為字典的話只需要使用json.loads這個方法就可以了;另外,eval處理json的性能也是遠遠比不上json庫的,
二、Json.loads與eval 性能對比
現在我們創建一個長度為100萬的json字串資料:
test_data = json.dumps({str(i): i for i in range(1000000)})
然后分別通過eval,json.loads來處理,他們的時間對比:
1. eval
執行時間為: 0:00:03.730528
2. json.loads
執行時間為: 0:00:00.466475
執行時間相差了8倍多!
另外在自己的專案中,剛好有需求涉及到100KB+的json字串轉換,它們的耗時對比如下:

如果沒有并發執行的情況下,使用json.loads或eval來轉換花費的時間差距不是能夠感知出來的,但涉及并發執行那就會變得很明顯,所以快把你代碼中處理json的eval改為json.loads吧!
如果做請求使用的是requests庫的話,可以直接使用它的json()方法,例如:
res=requests.get(url='http://qqlykm.cn/api/t/url.php?url=quniao.blog.csdn.net')
res_dict=res.json()
查看原始碼發現它也是呼叫python標準庫中的json.loads方法,只是這樣可以少寫一點代碼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325599.html
標籤:python
