最近在使用django做項目的時候想使用ajax來實現前后台數據的交互,但是在將數據庫查詢結果轉換成json數據時,遇到時間格式的數據轉換遇到問題,無法正確的進行轉換,具體如下:
轉換成json時使用的方法如下:
json.dumps(MyModel.objects.values())
報錯信息如下:
Exception Value: [{'date': datetime.date(2012, 5, 26), 'time': datetime.time(0, 42, 27)}] is not JSON serializable
最后經過google(渣度無解,找到一些方案,但都不太好,而且都是轉載來轉載去的......)找到的解決方案如下:
from django.core import serializers
from django.core.serializers.json import DjangoJSONEncoder
import json
temp_output = serializers.serialize('python', MyModel.objects.all())
output = json.dumps(temp_output, cls=DjangoJSONEncoder)
ok,搞定。現在萬事大吉。。。。but,中文字符轉換后亂碼?????別着急,只需要在執行json.dumps方法的時候將ensure_ascii設定為False即可,即將下面這行代碼進行修改:
temp_output = serializers.serialize('python', MyModel.objects.all())
修改后如下:
temp_output = serializers.serialize('python', MyModel.objects.all(), ensure_ascii=False)
注意如果在查詢的時候使用了values,則直接使用:
json.dumps(list(tmp_output), ensure_ascii=False, cls=DjangoJSONEncoder)