0

0

将 Neo4j 查询结果转换为 D3.js 可用的 Graph JSON 格式

花韻仙語

花韻仙語

发布时间:2025-08-24 20:02:24

|

832人浏览过

|

来源于php中文网

原创

将 neo4j 查询结果转换为 d3.js 可用的 graph json 格式

本文旨在指导开发者如何将 Neo4j 数据库查询结果转换为 D3.js 等可视化库可以使用的 Graph JSON 格式(包含 nodes 和 links 数组)。通过使用 APOC 库的 apoc.export.json.data 函数,我们可以将节点和关系数据分别导出为 JSON 数组,从而方便地在前端进行图形展示。文章将提供示例代码和相关注意事项,帮助你快速实现数据转换。

使用 APOC 库导出 Graph JSON 数据

Neo4j 数据库本身返回的结果格式可能不直接适用于 D3.js 等图形可视化库。为了方便前端使用,我们需要将查询结果转换为包含 nodes 和 links 数组的 Graph JSON 格式。APOC (Awesome Procedures On Cypher) 库提供了一系列强大的工具,可以帮助我们实现这一目标。

以下示例展示了如何使用 apoc.export.json.data 函数将节点和关系数据导出为 JSON 数组:

MATCH (n:MyNode)-[r:MY_REL]-()
WITH COLLECT(n) as mynodes, COLLECT(r) as myrels
CALL apoc.export.json.data(mynodes, myrels, null, {stream:True, jsonFormat: "JSON", writeNodeProperties:False})
YIELD data
RETURN data

代码解释:

  1. MATCH (n:MyNode)-[r:MY_REL]-(): 这部分 Cypher 查询语句用于匹配节点类型为 MyNode,关系类型为 MY_REL 的图数据。你可以根据实际情况修改节点和关系的类型。
  2. WITH COLLECT(n) as mynodes, COLLECT(r) as myrels: COLLECT 函数用于将匹配到的所有节点收集到 mynodes 列表中,将所有关系收集到 myrels 列表中。
  3. CALL apoc.export.json.data(mynodes, myrels, null, {stream:True, jsonFormat: "JSON", writeNodeProperties:False}): 这行代码调用 APOC 库的 apoc.export.json.data 函数,将节点和关系数据导出为 JSON 格式。
    • mynodes: 节点列表。
    • myrels: 关系列表。
    • null: 表示不导出任何属性。
    • {stream:True, jsonFormat: "JSON", writeNodeProperties:False}: 配置选项。
      • stream:True: 启用流式输出,适用于大型数据集。
      • jsonFormat: "JSON": 指定 JSON 格式。
      • writeNodeProperties:False: 不导出节点属性,如果需要导出节点属性,可以设置为 true。
  4. YIELD data: 将导出的 JSON 数据返回。
  5. RETURN data: 返回数据。

注意事项:

  • 确保你的 Neo4j 数据库已经安装了 APOC 库。你可以通过 Neo4j Browser 或 Neo4j Desktop 安装 APOC 库。
  • apoc.export.json.data 函数有多种配置选项,可以根据你的需求进行调整。例如,你可以指定导出的文件名、是否导出节点属性等。详细的配置选项可以参考 APOC 官方文档。
  • 上述代码将节点和关系数据分别导出为两个 JSON 数组。如果你需要将它们合并为一个包含 nodes 和 links 数组的 Graph JSON 对象,需要在 Node.js 代码中进行处理。

在 Node.js 中处理 Neo4j 查询结果

在你的 Node.js Express 应用中,你可以使用 neo4j-driver 连接 Neo4j 数据库,并执行上述 Cypher 查询。然后,你需要将查询结果转换为 D3.js 可用的 Graph JSON 格式。

Munch
Munch

AI营销分析工具,长视频中提取出最具吸引力的短片

下载

以下是一个示例代码:

import neo4j from 'neo4j-driver';
import {
  NEO4J_PASSWORD,
  NEO4J_URL,
  NEO4J_USERNAME,
} from '../../constants/index.js';

export const runMatchQuery = async (req, res) => {
  const query = req?.body?.query;
  if (query?.toLowerCase()?.includes('match')) {
    const driver = neo4j.driver(
      NEO4J_URL,
      neo4j.auth.basic(NEO4J_USERNAME, NEO4J_PASSWORD)
    );
    const session = driver.session();

    try {
      const result = await session.run(query);
      const records = result.records;

      // 提取节点和关系数据
      let nodes = [];
      let links = [];

      if (records && records.length > 0) {
          const data = records[0].get("data"); // Assuming 'data' is the key in the RETURN statement
          if(data && data.nodes){
              nodes = data.nodes;
          }
          if(data && data.relationships){
              links = data.relationships;
          }
      }


      const graphData = {
        nodes: nodes,
        links: links,
      };

      return res.status(200).json(graphData);
    } catch (error) {
      console.log(error);
      return res.status(500).json({ message: error.message });
    } finally {
      await session.close();
      await driver.close();
    }
  } else {
    return res.status(405).json({ message: 'Query not permitted.' });
  }
};

代码解释:

  1. 从 result.records 中提取查询结果。
  2. 遍历 records,将节点和关系数据分别添加到 nodes 和 links 数组中。注意,你需要根据实际情况调整提取数据的逻辑。
  3. 创建一个包含 nodes 和 links 数组的 graphData 对象。
  4. 将 graphData 对象作为 JSON 响应返回给客户端。

总结:

通过结合 APOC 库的 apoc.export.json.data 函数和 Node.js 代码,我们可以方便地将 Neo4j 查询结果转换为 D3.js 等可视化库可以使用的 Graph JSON 格式。这种方法可以简化前端开发流程,提高开发效率。请务必根据实际情况调整代码,以满足你的具体需求。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

435

2024.03.01

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.6万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号