Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django JSON自定义序列化丢失日期时间类型_Python_Django_Django Serializer - Fatal编程技术网

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

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

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

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

它无法按您认为应该的方式工作。关键是JSON没有日期/时间的本机类型,这就是Django序列化程序将日期时间转换为字符串的原因。但是,当然,一旦它们是弦,那么它们就是弦;反序列化程序无法知道它们曾经是datetimes。如果愿意,您可以编写另一个自定义反序列化程序,尝试对每个字符串调用
strtime
,以查看它是否“应该”为日期时间;但是开销将是巨大的,并且(取决于您的数据)可能会出现误报。

json.loads(encoded,cls=DjangoJSONEncoder)
像这样吗?这会引发
AttributeError:“DjangoJSONEncoder”对象没有属性“decode”
@maraujop
DjangoJSONEncoder
对值进行编码(.dumps),因此不能在
加载中使用。您可以实现自己的解码器,知道它将解析什么。谢谢,我原以为JSON有日期/时间支持,但现在检查一下,我们正在努力在ISO8601上实现标准化。知道这一点,我将以不同的方式解决这个问题。