2017-11-15 27 views
1

neo4jのcypherクエリの結果をJSON形式に変換したいと考えています。pythonを使用してneo4jからjson応答を取得

現在、グラフの接続と照会にneo4jライブラリを使用しています。私はできますが、結果をJSONに変換するのは面倒です。

は、ここに私の現在のコードです:

from neo4j.v1 import GraphDatabase, basic_auth 
from config import bolt_url,auth_id,auth_pass 

driver = GraphDatabase.driver(bolt_url, auth=basic_auth(auth_id, auth_pass)) 
session = driver.session() 

def get_some_data(limit=25) : 
    query = 'MATCH (n:Person)--(m:Organization) \ 
      RETURN n,m LIMIT ' + str(limit) 
    return session.run(query) 

result_some_data = get_some_data(limit=1) 
gen = result_some_data.records() 

for record in gen : 
    for k,v in record.items() : 
     print('{',k,':',v,'}') 
     print(v.get('name','meow')) 

session.close 

私は次の出力を取得する:あなたが見ることができるように、出力がNodeオブジェクトを与えている

{ n : <Node id=44567 labels={'Person'} properties={'name': 'ABC'}> } 
ABC 
{ m : <Node id=34745 labels={'Organization'} properties={'name': 'XYZ'}> } 
XYZ 

propertiesを取得できますが、labelsまたはidは取得できません。私はidlabelsを得ることができるかもしれませんが、それは非常に複雑で非常に面倒です。

私が必要とするJSON形式は非常に限定されており、その特定の形式で結果を得ることは期待していません。

のは、これは私が必要とする基本的なJSON形式であるとしましょう:

{ 
    "results": [{ 
     "columns": ["n", "m"], 
     "data": [{ 
      "graph": { 
       "nodes": [{ 
        "id": "44567", 
        "labels": ["Person"], 
        "properties": { 
         "name": "ABC" 
        } 
       }, { 
        "id": "34745", 
        "labels": ["Organization"], 
        "properties": { 
         "name": "ABC" 
       }], 
       "relationships": [{ 
        "id": "1", 
        "type": "WorksIn", 
        "startNode": "44567", 
        "endNode": "34745", 
        "properties": { 
         "title": "CEO" 
        } 
       }] 
      } 
     }] 
    }], 
} 

ここでのコードは、私は将来的に使用するつもりコードではありません、それは私がこれを尋ねるために書いただけのデモコードです質問。

基本的にここで私が求めているのは、結果を解析してJSONを生成するのではなく、cypherクエリを実行した後にneo4jからJSON応答を取得する方法です。あなたがラベルとIDを取得するために面倒で何を意味するか

答えて

1

わからない...私は意味、あなたはO Nodeオブジェクトを持っている場合は、idがをo.idされ、ラベルがo.labelsですいいえ?

とにかく、問題はCypherがかなり別のもの(離散値、ノード、リレーションシップ、パス、サブグラフなどのテーブル)を返すことができることです。ドライバを使用してデータベースにアクセスすると、その結果をどうするかを決める必要があります。したがって、結果セット(データベースの観点からは何でも含めることができます)が与えられ、自分で後処理を行う必要があります。

JSONのような結果が本当に必要な場合は、HTTPエンドポイント経由でデータベースにクエリを実行できます。しかし、それはまだあなたの最後から重い処理が必要です。

これが役立つことを願っています(少なくとも、物事はどういうものなのかを説明してください)。

よろしくお願いします。 Tom

関連する問題