標籤:imp ack .net osc 技術分享 怎麼辦 https 方法 mod
情境描述:
Python標準庫中的json模組,整合了將資料序列化處理的功能;在使用json.dumps()方法序列化資料時候,如果目標資料中存在datetime資料類型,執行操作時,
會拋出異常:TypeError: datetime.datetime(2016, 12, 10, 11, 04, 21) is not JSON serializable
那麼遇到json.dumps序列化不支援的資料類型,該怎麼辦!
首先,我們先來瞭解一下,json.dumps,序列化操作預設支援的資料類型:
Python中的序列化操作,主要應用在將資料庫中檢索的資料返回給用戶端使用者時;一般情況下,後端返回給前端Ajax請求的資料格式都是Json格式。
1、serializers
from django.core import serializers ret = models.BookType.objects.all() data = serializers.serialize("json", ret)
2、json.dumps
import json #ret = models.BookType.objects.all().values(‘caption‘)ret = models.BookType.objects.all().values_list(‘caption‘) ret=list(ret) result = json.dumps(ret)
對於,特殊的資料類型,例如,datatime() 時間類型,json.dumps不支援該資料類型的序列化;那麼就可以通過自訂處理來擴充。
import json from datetime import date from datetime import datetime class JsonCustomEncoder(json.JSONEncoder): def default(self, field): if isinstance(field, datetime): return o.strftime(‘%Y-%m-%d %H:%M:%S‘) elif isinstance(field, date): return o.strftime(‘%Y-%m-%d‘) else: return json.JSONEncoder.default(self, field) # ds = json.dumps(d, cls=JsonCustomEncoder)
使用的時候,只要在json.dumps()方法中增加一個cls參數即可:
執行個體代碼:
參考:https://my.oschina.net/whp/blog/111173
Python json.dumps 特殊資料類型的自訂序列化操作