Python py2neo Neo4j类型错误:<;在0x03D25C50处映射对象>;JSON不可序列化
当我使用Python连接图形数据库(neo4j)时,我遇到了问题Python py2neo Neo4j类型错误:<;在0x03D25C50处映射对象>;JSON不可序列化,python,neo4j,py2neo,Python,Neo4j,Py2neo,当我使用Python连接图形数据库(neo4j)时,我遇到了问题 “0x03D25C50处的映射对象”不是JSON可序列化的,但是0x03D25C50处的映射对象是映射()方法的结果。我不知道如何解决这个问题 这里有什么明显的我错了吗?对图像中的错误的快速回答是,除了块,您没有从返回响应。因此,由于try失败,您的视图不会返回任何内容。但这并不能回答真正的问题。我没有在python中使用mapfor循环,通常能很好地完成工作。我对neo4j一点也不熟悉。话虽如此,我相信答案是你正在使用\uuuu
“0x03D25C50处的映射对象”不是JSON可序列化的
,但是0x03D25C50处的映射对象
是映射()方法的结果。我不知道如何解决这个问题
这里有什么明显的我错了吗?对图像中的错误的快速回答是,除了
块,您没有从返回响应。因此,由于try
失败,您的视图不会返回任何内容。但这并不能回答真正的问题。我没有在python中使用map
for
循环,通常能很好地完成工作。我对neo4j
一点也不熟悉。话虽如此,我相信答案是你正在使用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法。你这么做有什么理由吗?根据迭代iterable以获取下一组数据时使用的方法。换句话说,当你在一个iterable上循环时,它会被隐式调用——比如用一个for
循环。可能发生的情况是,如果只有一组数据,当您第一次调用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但是,当您第二次调用它时,它没有要返回的数据,因此您将得到一个映射对象。这可能不是100%正确的答案,但请尝试删除\uuuuuuuuuuuuuuuuuuuuuuu下一个\uuuuuuuuuu
呼叫,看看是否有帮助。尝试简单地编码str(边)
和str(节点)
而不是在Python 2中调用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。在Python3中,它返回一个迭代器而不是一个列表,json
模块无法序列化该列表。如果需要列表而不是迭代器,则应使用列表理解:[buildNodes(row)for row in graph.cypher.execute(…)]
。您也可以通过执行list(map(…))
强制键入它,但这并不像listcomp那样清晰
您应该知道,不能在列表上调用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。但是,您可以打印整个列表而不使用它,因此,除非您显式地尝试延迟加载,否则列表无论如何都是一个更好的选择
您可以阅读标准文档中列表/其他序列类型和迭代器之间的一些差异,以及next
内置函数,以及为什么优于\uuuuuuuuuuuuuuuuuu我不确定map
对象是否实现了此功能,但是许多对象实现了\uuu str\uu
方法,这样您就可以获得数据的字符串表示。有时它只是类名,但例如,dict
对象将执行以下操作:>str({'b':2,'c':3})“{'c':3,'b':2}”
非常感谢,我已经更改了代码,但问题如下所示,我期待您的答案。非常感谢!
from flask import Flask, jsonify, render_template
from py2neo import Graph,authenticate
app = Flask(__name__)
authenticate("localhost:7474","neo4j", "neo4j")
graph = Graph("http://localhost:7474/db/data")
def buildNodes(nodeRecord):
print("............................")
data = {"id": str(nodeRecord.n._id), "label": next(iter(nodeRecord.n.labels))}
data.update(nodeRecord.n.properties)
print(data)
return {"data": data}
def buildEdges(relationRecord):
data = {"source": str(relationRecord.r.start_node._id),
"target": str(relationRecord.r.end_node._id),
"relationship": relationRecord.r.rel.type}
return {"data": data}
@app.route('/')
def index():
print("index")
return render_template('index.html')
@app.route('/graph')
def get_graph():
# print(graph.cypher.execute('MATCH (n) RETURN n').columns)
nodes = map(buildNodes, graph.cypher.execute('MATCH (n) RETURN n'))
print(nodes)
edges = map(buildEdges, graph.cypher.execute('MATCH ()-[r]->() RETURN r'))
print(edges)
# json_2={"nodes":nodes,"edges":edges}
# return json.dumps(json_2, cls=UserEncoder)
elements = {"nodes": nodes, "edges": edges}
print(dict(elements))
return jsonify(elements)
return jsonify(elements)
if __name__ == '__main__':
app.run(debug = False)