J'ai une classe en Python pour récupérer toutes les colonnes d'une table et retourner un JSON avec ces données.
Le problème est qu'au moins une de ces colonnes est une date/heure et je n'arrive pas à comprendre comment sérialiser les colonnes pour pouvoir générer un JSON valide.
Ma classe est la suivante:
class GetTodos(Resource):
def get(self):
con = cx_Oracle.connect('brunojs/[email protected]/orcl')
cur = con.cursor()
cur.execute("select * from organite_repository")
r = [dict((cur.description[i][0], value) \
for i, value in enumerate(row)) for row in cur.fetchall()]
cur.connection.close()
return (r[0] if r else None) if None else r
Des allusions à ce sujet?
JSON n'a pas de type date/heure par défaut, c'est pourquoi Python ne peut pas le gérer automatiquement. Donc, vous devez transformer la date/heure en chaîne d'une manière ou d'une autre. Je pense que le meilleur moyen est d'écrire un gestionnaire personnalisé pour aider le module JSON.
import datetime
import json
def datetime_handler(x):
if isinstance(x, datetime.datetime):
return x.isoformat()
raise TypeError("Unknown type")
json.dumps(data, default=datetime_handler)
Un moyen simple de le faire est de convertir vos données en string . De cette façon, vous pourrez dumper avec json.
>>> datetime.now()
datetime.datetime(2016, 3, 8, 11, 37, 24, 123639)
>>> str(datetime.now())
'2016-03-08 11:37:27.511053'
Mais vous pouvez également implémenter un sérialiseur pour transformer les données à votre guise.