2015-09-06 62 views
0
resp = web.Response(body=json.dumps(r, cls=CJsonEncoder, ensure_ascii=False, default=lambda o: o.__dict__).encode('utf-8')) 

当我使用jinja2,并检索日期形式MYSQL,但显示的错误。 数据:AttributeError:datetime.date对象没有属性'__dict__'

 
2015-09-01 
2015-09-04 

如何解决? 我需要将jinja2转换为django吗?

+0

当我更改类型日期以键入MYSQL的varchar(50)时,结果是正常的。 –

+0

你的数据包含'date'对象,你的'default'是使用一个对象的'__dict__','date'对象没有'__dict__'。写一个更聪明的'默认'功能。 – Eevee

+0

不,显然,使用类型varchar是有效的,我认为序列化是重点。因为datetime.date不能Serializable。谢谢! –

回答

1

这与Django或Jinja2或您的Web框架无关。您的数据包含date对象,JSON没有日期类型,因此json模块不知道如何存储它们。它试图回退到default函数,该函数仅转储对象的所有属性,但date类型在C中实现,并且没有Python属性。

您可以根据您的default扩展解决这个问题:

import datetime 

def json_default(value): 
    if isinstance(value, datetime.date): 
     return dict(year=value.year, month=value.month, day=value.day) 
    else: 
     return value.__dict__ 

resp = web.Response(body=json.dumps(r, cls=CJsonEncoder, ensure_ascii=False, default=json_default).encode('utf-8')) 

我使用.__dict__作为一个包罗万象的后备推荐,但 - 你的输出可能包含私人的垃圾,你的JSON可能不会产生解码时就像原始数据一样。