2012-02-12 4 views
2

Je reçois cette erreur:datetime sérialisation avec des flacons toJSON filtre

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

quand Jinja tente d'analyser cette ligne:

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

e contient un objet BSON de ma base de données de mongo. L'un des champs est un objet datetime. Comment puis-je obtenir un flacon pour le sérialiser correctement?

Ceci est mon modèle mongokit (dans le cas où son correspondant)

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) 

Répondre

5

JSON ne gère pas datetime objets. La pratique standard consiste à les coder sous forme de chaînes au format ISO. Ce SO question about JSON fournit des exemples. Vous devrez vous-même register le nouveau filtre codeur JSON.

2

À noter.

À partir de la version v0.10, Flask peut spécifier le vôtre json_encoder.

Et la valeur par défaut de Flask est au courant des dates (et quelques autres choses supplémentaires).

Questions connexes