2013-04-17 44 views
1

我使用Django json庫對從Django遊標獲取的數據進行編碼,但是我看到反序列化後的日期時間現在是unicode類型。簡單的例子:Django JSON自定義序列化丟失日期時間類型

import datetime 
from django.core.serializers.json import json, DjangoJSONEncoder 


today = datetime.datetime.now() 
encoded = json.dumps(today, cls=DjangoJSONEncoder) 
type(json.loads(encoded)) 
>> unicode 

如果我沒有弄錯變量類型應該受到尊重。然後我想也許有像DjangoJSONDecoder那樣的東西,但沒有。我究竟做錯了什麼?這是預期的行爲?

回答

3

它不能工作,你怎麼想它應該。重點是JSON沒有日期/時間的本機類型,這就是爲什麼Django序列化程序將日期時間轉換爲字符串的原因。但是,當然,一旦他們是字符串,那麼他們是字符串;解串器無法知道他們曾經是日期時間。如果你願意,你可以可以,寫一個進一步的自定義解串器,試圖在每個字符串上調用strptime,看看它是否應該是一個日期時間;但開銷會很大,並且(取決於您的數據)可能會受到誤報。

+0

謝謝,我認爲JSON有日期/時間的支持,但現在檢查有一個ISO 8601標準化的努力。瞭解這一點,我會解決問題不同的方式。 – maraujop

0

你沒有指定自定義解碼器類json.loadscls kwarg)

+0

'json.loads(encoded,cls = DjangoJSONEncoder)'這樣嗎?這引發了'AttributeError:'DjangoJSONEncoder'對象沒有屬性'decode'' – maraujop