我想将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
我得到以下输出:
{ n : <Node id=44567 labels={'Person'} properties={'name': 'ABC'}> }
ABC
{ m : <Node id=34745 labels={'Organization'} properties={'name': 'XYZ'}> }
XYZ
如您所见,输出将给出Node
对象。我可以得到properties
,但不能得到labels
或id
。我也许能够得到id
和labels
,但是它变得非常复杂和麻烦。
现在,我需要的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"
}
}]
}
}]
}],
}
这里的代码,不是我将来将要使用的代码,它只是我写来问这个问题的一个演示代码。
因此,我在这里所问的基本上是一种在运行密码查询之后从neo4j获取JSON响应的方法,而不是解析结果,然后生成一个JSON。
发布于 2017-11-17 05:26:48
不知道你的意思是不是很麻烦的拿到标签和身份证.我的意思是,如果你有一个节点对象,那么id是o.id,标签是o.labels,不是吗?
无论如何,问题是Cypher可以返回许多不同的东西(离散值表、节点、关系、路径、子图、.)当通过驱动程序访问数据库时,必须由您来决定如何处理结果。因此,您将得到一个结果集(从数据库的角度来看,结果集可以包含任何内容),并且必须自己进行后处理(因为只有您知道自己实际要求的是什么)。
如果您真的想要一个类似JSON的结果,可以通过HTTP端点查询数据库。不过,这仍然需要从你的终端进行大量的处理。
希望这会有所帮助(或者至少能解释为什么事情是这样的)。
你好,汤姆
发布于 2021-06-07 21:44:47
import json
def get_some_data(limit=25) :
query = 'MATCH (n:Person)--(m:Organization) RETURN n,m LIMIT ' + str(limit)
return session.run(query)
json_data = json.dumps(get_some_data(limit=1).data())
data()以递归方式提供json格式的记录。
https://stackoverflow.com/questions/47309120
复制相似问题