2013-04-17 43 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