程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Python >> 利用python的模塊緩存機制使JSON庫支持datetime類型

利用python的模塊緩存機制使JSON庫支持datetime類型

編輯:Python

在python運行環境中已加載模塊會存在於sys.modules,import 已加載模塊只是將sys.module中對應模塊引到local命名空間,多個文件多次import同一模塊內存中為同一模塊對象。

實現

因此我們可以通過修改已加載的模塊來達到修改標准庫的目的,gevent框架就是通過這種方式來監控調度方法的運行狀態,這裡我們也使用gevent的patch方式。
#monkey.py
# -*- coding: utf-8 -*-
import json
import datetime

class _JSONEncoder(json.JSONEncoder):
"""
JSONEncoder subclass that knows how to encode date/time.
"""

def default(self, o):
# See "Date Time String Format" in the ECMA-262 specification.
if isinstance(o, datetime.datetime):
r = o.isoformat()
if o.microsecond:
r = r[:23] + r[26:]
if r.endswith('+00:00'):
r = r[:-6] + 'Z'
return r
elif isinstance(o, datetime.date):
return o.isoformat()
else:
return super(_JSONEncoder, self).default(o)

def patch_json():
def dumps(obj, *args, **kwargs):
return _JSONEncoder(*args, **kwargs).encode(obj)
json.dumps = dumps

 


#test.py
# -*- coding: utf-8 -*-
import datetime
import json
import monkey
monkey.patch_json()

if __name__ == '__main__':
print json.dumps({'now': datetime.datetime.now()})

這樣就在沒有修改json模塊源碼的情況下使其支持dumps datetime類型,也算的上是非侵入式補丁了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved