Je suis assez novice en Python et dans mon application j'utilise Neomodel pour charger et récupérer les données des graphes depuis la base de données Neo4j.
Dans l'une de mes routes, j'ai la fonction suivante :
@api_mod.route('/users')
def get_users():
users = User.nodes #Returns a NodeSet
list_of_users = list(users) #Converts the NodeSet object to a list
return json.dumps(dict(users = [user for user in list_of_users]))
Ma classe d'utilisateur est définie comme suit :
class User(StructuredNode):
user_id = StringProperty(unique_index=True, required=True)
logged_in = RelationshipTo('Environment', 'LOGGED_IN', model=LoginAction)
launched = RelationshipTo('Application', 'LAUNCHED', model=LaunchedAction)
entered = RelationshipTo('Application', 'ENTERED', model=EnteredAction)
accessed = RelationshipTo('Application', 'ACCESSED', model=AccessedAction)
exited = RelationshipTo('Application', 'EXITED', model=ExitedAction)
logged_out = RelationshipTo('Environment', 'LOGGED_OUT', model=LogoutAction)
timed_out = RelationshipTo('Environment', 'TIME_OUT', model=TimeoutAction)
def toJSON(self):
return dict(user_id = self.user_id)
Je m'attends à ce que ma route /users renvoie un objet JSON contenant tous les utilisateurs de la base de données. Je comprends que l'objet NodeSet ne peut pas être sérialisé en un objet JSON, d'où ma tentative de le convertir en une liste. Mais maintenant, lorsque j'exécute, j'obtiens l'erreur suivante : "TypeError : Object of type 'User' is not JSON serializable".
et voici la trace complète de la pile : Traceback (dernier appel le plus récent) : File "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", line 1997, in appelez return self.wsgi_app(environ, start_response) Fichier "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", ligne 1985, in wsgi_app response = self.handle_exception(e) File "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", line 1540, in handle_exception reraise(exc_type, exc_value, tb) Fichier "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/_compat.py", ligne 33, in reraise raise valeur Fichier "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", ligne 1982, dans wsgi_app response = self.full_dispatch_request() File "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", line 1614, in full_dispatch_request rv = self.handle_user_exception(e) Fichier "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", ligne 1517, in handle_user_exception reraise(exc_type, exc_value, tb) Fichier "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/_compat.py", ligne 33, in reraise raise valeur Fichier "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", ligne 1612, in full_dispatch_request rv = self.dispatch_request() Fichier "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", ligne 1598, in dispatch_request return self.view_functionsrule.endpoint Fichier "/Users/mdebarros/PycharmProjects/useractivitylogs/app/api/routes.py", ligne 16, dans get_users return json.dumps(dict(users = [user for user in list_of_users])) Fichier "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/ init .py", ligne 231, dans dumps return _default_encoder.encode(obj) Fichier "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", ligne 199, in encode chunks = self.iterencode(o, _one_shot=True) Fichier "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", ligne 257, in iterencode return _iterencode(o, 0) Fichier "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", ligne 180, dans default o. classe . nom ) TypeError : L'objet de type 'User' n'est pas sérialisable en JSON.
Avez-vous de l'aide ou des suggestions sur la façon dont je peux gérer cela et retourner un objet JSON correct ?
Merci d'avance pour toute aide.
--MD