сериализация даты / времени с колбами Тойсона - PullRequest
2 голосов
/ 12 февраля 2012

Я получаю эту ошибку:

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

, когда jinja пытается проанализировать эту строку:

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

nd содержит объект bson из моей базы данных mongo.Одним из полей является объект datetime.Как я могу заставить колбу правильно сериализовать это?

Это моя модель монгокита (в случае необходимости)

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 ]

5 голосов
/ 12 февраля 2012

JSON не обрабатывает datetime объекты. Стандартная практика заключается в кодировании их в виде строк в формате ISO. Этот ТАК вопрос о JSON содержит примеры. Вам нужно будет зарегистрировать новый фильтр кодера JSON самостоятельно.

2 голосов
/ 31 января 2014

Просто чтобы отметить.

Начиная с версии 0.10, у Flask есть возможность указать свои json_encoder.

И значение по умолчанию Flask JSONEncoder знает о датах (и некоторых других дополнительных вещах).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...