Django JSON自定义序列化丢失日期时间类型

时间:2013-04-17 07:49:23

标签: python django django-serializer

我正在使用Django json库对从Django游标获取的数据进行编码,但是我在反序列化后看到的日期时间现在是unicode类型。简单的例子:

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的东西,但没有。我究竟做错了什么?这是预期的行为吗?

2 个答案:

答案 0 :(得分:4)

你觉得应该怎么做都不行。关键是JSON没有日期/时间的本机类型,这就是Django序列化程序将日期时间转换为字符串的原因。但是,当然,一旦它们成为弦乐,那么它们就是弦乐;解串器无法知道它们曾经是日期时间。你可以,如果你愿意,可以编写另一个自定义反序列化器,尝试在每个字符串上调用strptime,看它是否“应该”为日期时间;但是开销很大,并且(取决于你的数据)可能会出现误报。

答案 1 :(得分:0)

您没有为json.loadscls kwarg)指定自定义解码器类