AttributeError: datetime.date 对象没有属性“__dict__”

ken*_*cai 6 python

resp = web.Response(body=json.dumps(r, cls=CJsonEncoder, ensure_ascii=False, default=lambda o: o.__dict__).encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

当我使用 jinja2 并从 MYSQL 中检索日期时,但显示错误。数据:

2015-09-01
2015-09-04

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

Eev*_*vee 5

这与 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'))
Run Code Online (Sandbox Code Playgroud)

不过,我建议不要将其.__dict__用作全面的后备——您的输出可能包含私人垃圾,并且您的 JSON 在解码时可能不会产生与原始数据类似的任何内容。