Python Django JSON自定义序列化丢失日期时间类型
我使用Django json库对从Django游标获取的数据进行编码,但是我看到反序列化后的日期时间现在是unicode类型。简单的例子:Python Django JSON自定义序列化丢失日期时间类型,python,django,django-serializer,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.load
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的东西,但什么都没有。我做错了什么?这是预期的行为吗?您没有为
json.loads指定自定义解码器类(cls
kwarg)它无法按您认为应该的方式工作。关键是JSON没有日期/时间的本机类型,这就是Django序列化程序将日期时间转换为字符串的原因。但是,当然,一旦它们是弦,那么它们就是弦;反序列化程序无法知道它们曾经是datetimes。如果愿意,您可以编写另一个自定义反序列化程序,尝试对每个字符串调用strtime
,以查看它是否“应该”为日期时间;但是开销将是巨大的,并且(取决于您的数据)可能会出现误报。json.loads(encoded,cls=DjangoJSONEncoder)
像这样吗?这会引发AttributeError:“DjangoJSONEncoder”对象没有属性“decode”
@maraujopDjangoJSONEncoder
对值进行编码(.dumps),因此不能在加载中使用。您可以实现自己的解码器,知道它将解析什么。谢谢,我原以为JSON有日期/时间支持,但现在检查一下,我们正在努力在ISO8601上实现标准化。知道这一点,我将以不同的方式解决这个问题。