2017-10-18 2 views
1

Ma première question ici!jsonify bolt statementresult

Je développe des services web en utilisant python et flask. Neo4j est mon backend que je voudrais APIfy.

Je lance une requête de correspondance sur le graphique db et souhaite renvoyer un objet json. Voici le code.

from flask import Flask, jsonify 
from neo4j.v1 import GraphDatabase 

app = Flask(__name__) 

uri = "bolt://localhost:7687" 
driver = GraphDatabase.driver(uri, auth=(user, pass)) 

@app.route('/') 
def com_relations(): 
    with driver.session() as session: 
     with session.begin_transaction() as tx: 
      return jsonify(tx.run("MATCH (company:Company)-[]->(c) where c.name is not null " 
          "RETURN company.name, c.name")) 

     session.close() 

Mais j'obtiens une erreur lors de l'exécution de l'application. Je comprends l'erreur et je voudrais savoir comment jsonifier mon résultat d'instruction de neo4j. S'il vous plaît aider.

Répondre

1

Le problème est que le résultat de la requête est un StatementResult object, qui ne peut être « sérialisé ». Donc, vous devez d'abord préparer le résultat comme celui-ci:

from flask import Flask, jsonify 
from neo4j.v1 import GraphDatabase 

app = Flask(__name__) 

uri = "bolt://localhost:7687" 
driver = GraphDatabase.driver(uri, auth=(user, pass)) 

@app.route('/') 
def com_relations(): 
    with driver.session() as session: 
     with session.begin_transaction() as tx: 
      results = (tx.run("MATCH (company:Company)-[]->(c) where c.name is not null" 
           "RETURN company.name, c.name"))  
     session.close() 
     records = [] 
     for record in results: 
      records.append({"company.name": record["company.name"], 
          "name": record["c.name"]}) 
     return jsonify(records) 
+0

Merci! C'était à peu près ce que j'utilisais comme un substitut. J'ai eu une autre pensée s'il existe d'autres méthodes pour sérialiser un objet statementResult ... Merci pour votre temps. – Amsa

0

vous pouvez également changer la requête juste pour obtenir le format JSON.

"MATCH (company:Company)-[]->(c) where c.name is not null RETURN COLLECT({company:company.name, name:c.name}) AS jsonOutput"