Python代码解析:处理JSON数据并导入Neo4j数据库

Python代码解析:处理JSON数据并导入Neo4j数据库

    • 引言
    • 代码结构概览
    • 代码详解
      • 1. 导入必要的库
      • 2. 定义数据文件路径
      • 3. 读取JSON文件内容
      • 4. 连接Neo4j服务器
      • 5. 遍历数据并处理
    • 总结
    • 参考资料

引言

在数据处理和分析中,JSON是一种常见的数据格式。Neo4j是一个高性能的图数据库,能够存储和查询复杂的网络关系。本文将通过解析一段Python代码,详细介绍如何处理JSON数据并将其导入Neo4j数据库。

代码结构概览

首先,我们来看一下代码的整体结构:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time     :2022/9/13 10:03
# @File     :handler_person_data.py
# @Description: 处理json数据import json
import osfrom common import constant
from common.conn_neo4j import ConnNeo4j# 获得数据文件的路径
data_path = os.path.join(constant.DATA_DIR, "data-json.json")
# 读取数据文件的内容
data = json.load(open(data_path, 'r', encoding='utf-8'))
print("人物数目:", len(data))# 连接Neo4j服务器
neo4j = ConnNeo4j()
# 遍历数据
for item in data:item['name'] = item['中文名']# 毕业于school = []if '毕业于' in item.keys():school = item['毕业于']item.pop('毕业于')# 作品works = []if '作品' in item.keys():works = item['作品']item.pop('作品')# 相关人物relate_persons = {}if '相关人物' in item.keys():relate_persons = item['相关人物']item.pop('相关人物')print(item)# 创建人物节点neo4j.create_node("人物", item)# 创建学校节点,人物与学校间的关系neo4j.create_node_relations("人物", item, "学校", school, "毕业于", {'type': '毕业于'}, False)# 创建作品节点,人物与作品间的关系neo4j.create_node_relations("人物", item, "作品", works, "创作", {'type': '创作'}, False)# 创建相关人物,人物社会关系for key in relate_persons.keys():tmp_value = relate_persons[key]tmp_rel_type = keyif key in ['儿子', '女儿', '父亲', '母亲']:neo4j.create_node_relations("人物", item, "人物", tmp_value, tmp_rel_type, {'type': '亲子'}, False)elif key in ['孙子', '孙女', '爷爷', '奶奶']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '祖孙'}, False)elif key in ['哥哥', '妹妹', '弟弟', '姐姐']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '兄弟姐妹'}, False)elif key in ['丈夫', '妻子']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '夫妻'}, False)elif key in ['女婿', '儿媳']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '婿媳'}, False)elif key in ['学生', '老师']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '师生'}, False)else:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '其他'}, False)

代码详解

1. 导入必要的库

import json
import osfrom common import constant
from common.conn_neo4j import ConnNeo4j
  • json:用于处理JSON格式的数据。
  • os:用于处理文件路径。
  • constant:从common模块中导入的常量,可能包含数据目录等信息。
  • ConnNeo4j:从common.conn_neo4j模块中导入的Neo4j连接类。

2. 定义数据文件路径

# 获得数据文件的路径
data_path = os.path.join(constant.DATA_DIR, "data-json.json")
  • data_path:指向包含数据的JSON文件路径。

3. 读取JSON文件内容

# 读取数据文件的内容
data = json.load(open(data_path, 'r', encoding='utf-8'))
print("人物数目:", len(data))
  • 使用json.load()函数读取JSON文件的内容,并将其存储在data变量中。
  • 打印出数据中的人物数目。

4. 连接Neo4j服务器

# 连接Neo4j服务器
neo4j = ConnNeo4j()
  • 创建一个ConnNeo4j对象,用于连接Neo4j数据库。

5. 遍历数据并处理

# 遍历数据
for item in data:item['name'] = item['中文名']# 毕业于school = []if '毕业于' in item.keys():school = item['毕业于']item.pop('毕业于')# 作品works = []if '作品' in item.keys():works = item['作品']item.pop('作品')# 相关人物relate_persons = {}if '相关人物' in item.keys():relate_persons = item['相关人物']item.pop('相关人物')print(item)# 创建人物节点neo4j.create_node("人物", item)# 创建学校节点,人物与学校间的关系neo4j.create_node_relations("人物", item, "学校", school, "毕业于", {'type': '毕业于'}, False)# 创建作品节点,人物与作品间的关系neo4j.create_node_relations("人物", item, "作品", works, "创作", {'type': '创作'}, False)# 创建相关人物,人物社会关系for key in relate_persons.keys():tmp_value = relate_persons[key]tmp_rel_type = keyif key in ['儿子', '女儿', '父亲', '母亲']:neo4j.create_node_relations("人物", item, "人物", tmp_value, tmp_rel_type, {'type': '亲子'}, False)elif key in ['孙子', '孙女', '爷爷', '奶奶']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '祖孙'}, False)elif key in ['哥哥', '妹妹', '弟弟', '姐姐']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '兄弟姐妹'}, False)elif key in ['丈夫', '妻子']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '夫妻'}, False)elif key in ['女婿', '儿媳']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '婿媳'}, False)elif key in ['学生', '老师']:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '师生'}, False)else:neo4j.create_node_relations('人物', item, '人物', tmp_value, tmp_rel_type, {'type': '其他'}, False)
  • 遍历data中的每个JSON对象。
  • 中文名字段重命名为name
  • 处理毕业于作品相关人物字段,并将其从JSON对象中移除。
  • 打印处理后的JSON对象。
  • 调用neo4j.create_node()方法创建人物节点。
  • 调用neo4j.create_node_relations()方法创建学校、作品和相关人物节点,并建立相应的关系。

总结

通过这段代码,我们学会了如何从JSON文件中提取数据,并将其导入Neo4j数据库。这个过程包括读取JSON文件、处理数据、创建节点和关系。希望这篇文章对你理解如何处理JSON数据并导入Neo4j数据库有所帮助。

参考资料

  • Neo4j官方文档
  • Python JSON 模块文档
  • Python os 模块文档

希望这篇文章对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/7398.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

adb:Android调试桥

Android 调试桥 (adb) 是一种功能多样的命令行工具,可以通过命令行与设备进行通信。 查询设备 adb devices adb 会创建一个字符串,用于通过端口号唯一标识设备。 adb devices -l 加入 -l 选项,devices 命令会告知设备是什么。当连接了多个…

【C语言】分支和循环详解(下)猜数字游戏

与诸君共进步!!!!! 文章目录 1. 随机数的生成2. 猜数字小游戏的实现 1. 随机数的生成 掌握了前⾯学习的这些知识,我们就可以写⼀些稍微有趣的代码了,⽐如: 写⼀个猜数字游戏 游戏要求…

Java | Leetcode Java题解之第546题移除盒子

题目: 题解: class Solution {int[][][] dp;public int removeBoxes(int[] boxes) {int length boxes.length;dp new int[length][length][length];return calculatePoints(boxes, 0, length - 1, 0);}public int calculatePoints(int[] boxes, int l…

Pytorch学习--神经网络--现有网络模型的使用及修改

一、VGG16 weights (Optional[VGG16_Weights]): 这个参数是可选的,指的是预训练的权重。用户可以选择使用不同的预训练权重,具体可参见 VGG16_Weights 的详细说明。默认情况下,如果不提供此参数,模型将不会使用任何预训练权重。 p…

内部知识库:优化企业培训流程的关键驱动力

在当今快速变化的商业环境中,企业培训的重要性日益凸显。内部知识库作为整合、管理和分享企业内部学习资源的关键工具,正逐步成为优化企业培训流程的核心。以下将探讨内部知识库如何通过多种功能,助力企业提升培训效率、质量和员工满意度。 …

若依系统前端项目解读——从使用过程解读

登录系统 用户初次登录,浏览器中未存用户信息(token),需向后端请求并保存至浏览器中用户再次登录系统,向后端发请求会携带token在请求头中,并与后端Redis缓存的token比较,判断token是否还在有效…

前后端交互接口(三)

前后端交互接口(三) 前言 前两集我们先做了前后端交互接口的约定以及浅浅的阅读了一些proto代码。那么这一集我们就来看看一些重要的proto代码,之后把protobuffer给引入我们的项目当中! gateway.proto 我们来看一眼我们的网关…

【Python TensorFlow】进阶指南

在前文中,我们介绍了TensorFlow的基础知识及其在实际应用中的初步使用。现在,我们将进一步探讨TensorFlow的高级特性,包括模型优化、评估、选择、高级架构设计、模型部署、性能优化等方面的技术细节,帮助读者达到对TensorFlow的精…

2款使用.NET开发的数据库系统

今天大姚给大家分享2款使用.NET开发且开源的数据库系统。 Garnet Garnet是一款由微软研究院基于.NET开源的高性能、跨平台的分布式缓存存储数据库,该项目提供强大的性能(吞吐量和延迟)、可扩展性、存储、恢复、集群分片、密钥迁移和复制功能…

【react】React Router基础知识

1. 基础用法 npm i react-router-dom通过浏览器地址栏的切换,可以实现不同组件之间的切换。 import React from "react"; import ReactDOM from "react-dom/client"; // import App from "./App"; import reportWebVitals from &qu…

std::back_inserter

std::back_inserter 是 C 标准库中的一个函数模板&#xff0c;它用于创建一个插入迭代器&#xff08;insert iterator&#xff09;&#xff0c;这个迭代器可以在容器末尾插入新元素。它定义在 <iterator> 头文件中。 函数原型 template <typename Container> bac…

使用 FFmpeg 进行音视频转换的相关命令行参数解释

FFmpeg 是一个强大的多媒体框架&#xff0c;能够解码、编码、转码、录制、播放以及流化几乎所有类型的音频和视频。它广泛应用于音视频处理任务中&#xff0c;包括格式转换、剪辑、合并、水印添加等。本文中简鹿办公将介绍如何使用 FFmpeg 进行一些常见的音视频转换任务。 安装…

力扣:94--中序遍历二叉树

树 – 二叉树 完全二叉树&#xff1a; 完全二叉树可以用数组完美匹配位置&#xff08;先序存储&#xff1a;根左右&#xff09;&#xff0c; 推论一 &#xff1a; 位置为k的节点&#xff0c;左孩子&#xff1a;2*k 1 &#xff0c;右孩子 &#xff1a; 2 * &#xff08;k 1&…

CSS——选择器、PxCook软件、盒子模型

选择器 结构伪类选择器 作用&#xff1a;根据元素的结构关系查找元素。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

SpringMVC学习记录(三)之响应数据

SpringMVC学习记录&#xff08;三&#xff09;之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…

推荐一款ETCD桌面客户端——Etcd Workbench

Etcd Workbench 我相信很多人在开始管理ETCD的时候都去搜了Etcd客户端工具&#xff0c;然后找到了官方的Etcd Manager&#xff0c;但用完之后发现它并不好用&#xff0c;还不支持多连接和代码格式化&#xff0c;并且已经好几年不更新了&#xff0c;于是市面上就有了好多其他客…

FET113i-S核心板已支持RISC-V,打造国产化降本的更优解 -飞凌嵌入式

FET113i-S核心板是飞凌嵌入式基于全志T113-i处理器设计的国产工业级核心板&#xff0c;凭借卓越的稳定性和超高性价比&#xff0c;FET113i-S核心板得到了客户朋友们的广泛关注。作为一款拥有A7核RISC-V核DSP核的多核异构架构芯片&#xff0c;全志科技于近期释放了T113-i的RISC-…

实践出真知:MVEL表达式中for循环的坑

目录标题 背景MVEL脚本(有问题的)MVEL脚本(正确的)结论分析 背景 需要从一个URL的拼接参数中解析出id的值并输出 比如&#xff1a; 存在URLhttps://xxxxxxxxxx?id999999&type123&name345 然后需要输出id999999 MVEL脚本(有问题的) 入参&#xff1a;parseThisUrlhttp…

【数据集】【YOLO】【目标检测】道路裂缝数据集 5466 张,YOLO/VOC格式标注!

数据集介绍 【数据集】道路裂缝数据集 5466 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。数据集中包含一种分类&#xff0c;检测范围城市道路裂缝、高速道路裂缝、乡村道路裂缝。 戳我头像获取数据&#xff0c;或者主页私聊博主哈~ 一、数据概述 道路裂缝检测…

SCRM开发新趋势打造高效客户关系管理系统

内容概要 在当今数字化的浪潮中&#xff0c;客户关系管理&#xff08;SCRM&#xff09;系统的开发正迎来了突破性的新趋势。传统的客户管理方式已经无法满足现代企业对灵活性与高效性的需求&#xff0c;我们必须顺应时代的发展&#xff0c;采用更为智能化的解决方案。SCRM开发…