使用flask tojson过滤器序列化日期时间

时间:2012-02-12 02:12:47

标签: python serialization mongodb flask jinja2

我收到了这个错误:

TypeError: datetime.datetime(2012, 2, 12, 0, 47, 6, 542000) is not JSON serializable

当jinja试图解析这一行时:

var root_node_info = eval({{ nd|tojson|safe }});

nd包含来自我的mongo数据库的bson对象。其中一个字段是日期时间对象。我怎样才能让烧瓶正确序列化?

这是我的mongokit模型(如果相关)

class Item(Document):
    structure = {
        "tldr": unicode,
        "body": unicode,
        "user": unicode,
        "time_submitted": datetime.datetime,
        "upvotes": int,
        "downvotes": int,
        "tags": [unicode]
    }

    validators = {
    }

    indexes = [
        {'fields':['user']},
        {'fields':['tags']}
    ]

    use_dot_notation = True

    required_fields = ['body', 'user', 'time_submitted']
    default_values = {'time_submitted': datetime.datetime.utcnow}

    def __repr__(self):
        return '<item %r>' % (self._id)

2 个答案:

答案 0 :(得分:5)

JSON不处理datetime个对象。标准做法是将它们编码为ISO格式的字符串。这个SO question about JSON提供了示例。您需要自己register新的JSON编码器过滤器。

答案 1 :(得分:2)

请注意。

自v0.10起,Flask可以指定您自己的json_encoder

Flask的默认JSONEncoder知道日期(以及其他一些其他内容)。