Ich bin ziemlich neu in Python und in meiner Anwendung verwende ich Neomodel zum Laden und Abrufen von Grafikdaten aus Neo4j-Datenbank.Python NeoModel wie Abfrageergebnis als JSON-Objekt zurückgeben
In einem meiner Routen habe ich die folgende Funktion:
@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]))
Meine Benutzerklasse wird wie folgt definiert:
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)
Meine Erwartung ist, dass meine/Benutzer Route ein JSON-Objekt zurück mit allen Benutzern in der Datenbank. Ich verstehe, dass das NodeSet-Objekt nicht zu einem JSON-Objekt serialisierbar ist, daher versuche ich es in eine Liste zu konvertieren. Aber jetzt, wenn ich laufe ich die folgende Fehlermeldung erhalten: „Typeerror: Objekt vom Typ‚User‘ist nicht JSON serializable“
und hier ist der ganze Stack-Trace: Traceback (jüngste Aufforderung zuletzt): File " /Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py ", Zeile 1997, in Anruf zurückgeben self.wsgi_app (environ, start_response) Datei"/Benutzer/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py ", Zeile 1985, in wsgi_app Antwort = self.handle_exception (e) Datei" /Users/mdebarros/.virtualenvs/useractivitylogs /lib/python3.6/site-packages/flask/app.py ", Zeile 1540, in handle_exception reraise (exc_type, exc_value, tb) Datei "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/_compat.py", Zeile 33, in Reraise erhöhen Wert File "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py", Zeile 1982 in wsgi_app response = self.full_dispatch_request() Datei „/ Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/app.py ", Zeile 1614, in full_dispatch_request rv = self.handle_user_exception (e) Datei" /Users/mdebarros/.virtualenvs/useractivitylogs /lib/python3.6/site-packages/flask/app.py ", Zeile 1517, in handle_user_exception reraise (exc_type, exc_value, tb) File "/Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/site-packages/flask/_compat.py", Zeile 33, in Reraise raise Wert File „/Users/mdebarros/.virtualenvs/useractivitylogs /lib/python3.6/site-packages/flask/app.py ", Zeile 1612, in full_dispatch_request rv = self.dispatch_request() Datei" /Users/mdebarros/.virtualenvs/useractivitylogs/lib/python3.6/ site-packages/flask/app.py ", Zeile 1598, in dispatch_request return self.view_functionsrule.endpoint Datei" /Users/mdebarros/PycharmProjects/useractivitylogs/app/api/routes.py ", Zeile 16, in get_users return json.dumps (dict (users = [Benutzer für Benutzer in list_of_users]))) Datei "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ json/init .py ", Zeile 231, in Dumps zurückgeben _default_encoder.encode (obj) Datei" /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3. 6/json/encoder.py ", Zeile 199, in encode chunks = self.iterencode (o, _ein_shot = True) Datei" /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions /3.6/lib/python3.6/json/encoder.py ", Zeile 257, im Iterencode return _iterencode (o, 0) Datei" /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework /Versions/3.6/lib/python3.6/json/encoder.py ", Zeile 180, standardmäßig o.Klasse. Name) Typeerror: Objekt vom Typ ‚User‘ ist nicht JSON serializable
Jede Hilfe oder Anregungen, wie ich damit umgehen kann und ein richtiges JSON-Objekt zurückgeben?
Vielen Dank im Voraus für jegliche Hilfe.
--MD
Danke @Coding, es funktionierte perfekt. Die einzige Änderung, die ich gemacht habe, falls jemand dies jemals in der Serialisierungsmethode benötigt, da ich nach Informationen über den Knoten selbst suche, habe ich nur die Eigenschaft user_id zurückgegeben, da alle anderen Beziehungen waren. – Cracoras