resp = web.Response(body=json.dumps(r, cls=CJsonEncoder, ensure_ascii=False, default=lambda o: o.__dict__).encode('utf-8'))
当我使用jinja2,并从MYSQL中检索日期时,但显示错误。 数据:
2015-09-01 2015-09-04
如何解决? 我可能需要将jinja2转换为django ??
答案 0 :(得分:1)
这与Django或Jinja2或您的Web框架无关。您的数据包含date
个对象,JSON没有日期类型,因此json
模块不知道如何存储它们。它试图回退到你的default
函数,它只转储所有对象的属性,但date
类型是用C实现的,并没有Python的dict属性。
您可以通过展开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在解码时可能不会产生类似原始数据的内容。< / p>