我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文描述python如何调用neo4j里面的数据,接口输出为json的事情。本需求挺简单的,原理在以前的文章里面也说过了。本文就是拿个新瓶子装一下以前的老酒。然后提出一个客观存在的数据丢失的问题,并且还没有提出解决方案。

苏南大叔:python如何实现neo4j数据查询接口?格式化输出json - neo4j-data2json
python如何实现neo4j数据查询接口?格式化输出json(图4-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述,neo4j数据通过python编写的输出json格式数据的事情。测试环境:python@3.6.8py2neo@2021.2.3neo4j@4.4.10flask@2.0.3

样本数据

创建了一个博客节点的样本数据,cypher语句如下:

merge (n:网站:博客 {名称:'程序如此灵动',网址:'newsn.net'});

苏南大叔:python如何实现neo4j数据查询接口?格式化输出json - match-node
python如何实现neo4j数据查询接口?格式化输出json(图4-2)

这里使用的是merge而并不是create,两者区别如下:

py2neo

这里python通过py2neo来查询数据,查询的cypher语句是查询一个商品节点。

match(n{名称:'程序如此灵动'}) return n

代码执行:

from py2neo import Graph
graph = Graph('http://localhost:7474', auth=("neo4j", "neo4j"))
cql = "match(n{名称:'程序如此灵动'}) return n"
data = graph.run(cql).data()
print(data, type(data))

这里查询到的data数据是个<class 'list'>类型。输出数据类似如下:

[{'n': Node('博客', '网站', 名称='程序如此灵动', 网址='newsn.net')}]

苏南大叔:python如何实现neo4j数据查询接口?格式化输出json - 运行结果
python如何实现neo4j数据查询接口?格式化输出json(图4-3)

详情可以参考:

list数据转json

本小节内容,其实就是把list格式数据输出为json格式,使用的当然是python自带的json库。

import json
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

输出如下:

[{"n": {"网址": "newsn.net", "名称": "程序如此灵动"}}]
ensure_ascii=False参数,是用于正常显示中文字符的。当然也可以使用格式化的json,不会影响后续接口解析的。

代码如下:

import json
json_str = json.dumps(data, indent=4, ensure_ascii=False)
print(json_str)

输出如下:

[
    {
        "n": {
            "网址": "newsn.net",
            "名称": "程序如此灵动"
        }
    }
]
可以看到在listjson输出的时候,节点的标签数据丢失了。苏南大叔觉得,对于这种情况最好是别直接转json。拿到的list数据转化为一个自定义的标准后,再转json格式。是不是会更好一些呢?这种情况待议。

HTTP服务(Flask)

因为做接口的目的就是提供调用的,目前的这个代码实现了json输出,并不是提供接口服务。所以,这里使用flask框架,来做个简单的服务容器。

import flask
from py2neo import Graph
import json
api = flask.Flask(__name__)

@api.route('/', methods=['get'])
def index():
    graph = Graph('http://localhost:7474', auth=("neo4j", "neo4j"))
    cql = "match(n{名称:'程序如此灵动'}) return n"
    data = graph.run(cql).data()
    json_str = json.dumps(data, indent=4, ensure_ascii=False)
    return json_str

if __name__ == '__main__':
    api.run(port=8888, debug=True, host='127.0.0.1')

苏南大叔:python如何实现neo4j数据查询接口?格式化输出json - www-api
python如何实现neo4j数据查询接口?格式化输出json(图4-4)

Flask容器服务:

解析接口返回值:

相关链接

总结

得到数据,组织数据,然后输出数据。就是本篇文章中所做的事情,但是目前本文中所使用的方式,输出的数据实际上会有丢失,这个待议。更多neo4j经验文章,请参考链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   json    neo4j