Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python py2neo Neo4j类型错误:<;在0x03D25C50处映射对象>;JSON不可序列化_Python_Neo4j_Py2neo - Fatal编程技术网

Python py2neo Neo4j类型错误:<;在0x03D25C50处映射对象>;JSON不可序列化

Python py2neo Neo4j类型错误:<;在0x03D25C50处映射对象>;JSON不可序列化,python,neo4j,py2neo,Python,Neo4j,Py2neo,当我使用Python连接图形数据库(neo4j)时,我遇到了问题 “0x03D25C50处的映射对象”不是JSON可序列化的,但是0x03D25C50处的映射对象是映射()方法的结果。我不知道如何解决这个问题 这里有什么明显的我错了吗?对图像中的错误的快速回答是,除了块,您没有从返回响应。因此,由于try失败,您的视图不会返回任何内容。但这并不能回答真正的问题。我没有在python中使用mapfor循环,通常能很好地完成工作。我对neo4j一点也不熟悉。话虽如此,我相信答案是你正在使用\uuuu

当我使用Python连接图形数据库(neo4j)时,我遇到了问题
“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)