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.mzph.cn/web/58138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 + CubeMX + 硬件SPI + W5500 +UDP

这篇文章记录一下STM32W5500UDP的调试过程,实现UDP数据的接收与发送。 目录 一、W5500模块介绍二、Stm32CubeMx配置三、Keil代码编写1、添加W5500驱动代码到工程(添加方法不赘述,驱动代码可以在官网找)2、在工程中增加代码&#…

2023年SCRM系统排名分析及市场趋势解读

内容概要 当前,SCRM(社交客户关系管理)系统在企业运营中的重要性日益凸显,尤其是在快速发展的数字经济环境中。2023年的SCRM市场展现出多元化与专业化的趋势,不同企业在客户关系管理方面的需求各有不同,这…

显存占用 显存测试

目录 显存测试 显存占用示例 一个模型多卡占用 显存测试 import torch# 计算张量的大小(例如:每个 float 占用 4 字节) # 40GB 40 * 1024 * 1024 * 1024 字节 # 每个 float 4 字节,因此需要的 float 数量为 (40 * 1024 * 1024…

StableDiffusion-3.5 文生图模型本地部署尝鲜

文章目录 官方仓库ComfyUI 配置模型文件生成图片,观察日志生成样例 买了新的 4070TiS 显卡之后,终于有了个人的 16GB 显存,再也不用在关键时刻和实验室的其他人抢那两张 3080Ti 12G 了,所以想试试看干净的 Linux 环境下&#xff0…

规范:项目、目录、文件、样式、事件、变量、方法、url参数、注释、git提交 命名规范及考证

一、规范命名的重要性 易懂、通用、规范、标准、专业性、是经验积累的体现 1.1、常见命名方法 序号命名方法解释1全小写2全大写3驼峰:小驼峰命名法4驼峰:大驼峰命名法5烤串命名法 / 脊柱命名法6下划线分隔法 二、项目名 采用小写字母和中划线&#…

Navicat 连接远程腾讯云服务器的MySQL数据库

首先需要开放开放腾讯云安全端口,可以参考这个链接腾讯云服务器入站规则端口开放使用指南(CentOS系统)。 但是注意需要开放的是IPv6,这个可以通过netstat命令查看确认。 然后查看当前用户信息 select user, host from mysql.user一般看到的都是 localh…

第三十四篇:URL和URI的区别,HTTP系列一

前面我们讲到通过TCP协议通信双方建立可靠连接,那么此时双方进行通信,需要用人能理解的形式进行信息组织,也就是为各种特定需求服务,满足日常生活中的各种场景。 比如:网页浏览、电子邮件、远程登录、文件传输、网络管…

什么情况下,不推荐建立索引?

一般有以下几种情况不推荐建立索引: 1)对于数据量很小的表 当表的数据量很小(如几百条记录)时,建立索引并不会显著提高查询性能,反而可能增加管理的复杂性; 2)频繁更新的表 对于…

GitHub上传自己的项目

目录 一、安装Git插件 1)下载 2)安装 二、创建Gothub的创库 三、通过Git上传本地文件到Github 四、其他 1、部分指令 2、如果已经运行过git init并设置了[user],下次可以直接用 一、安装Git插件 1)下载 下载地址&#x…

你需要了解的Android主题相关知识

在 Android 开发中,主题(Theme)是用于定义应用的视觉风格的一组样式集合。主题决定了应用的配色、字体样式、控件外观等,是整个应用的一致性视觉体验的重要组成部分。以下是对 Android 主题的全面介绍,包括主题的基础概…

寻找符合要求的最长子串

题目描述 给定一个字符串 s s s ,找出这样一个子串: 1)该子串中的任意一个字符最多出现2次; 2)该子串不包含指定某个字符; 请你找出满足该条件的最长子串的长度。 输入描述: 第一行为要求…

【Linux 从基础到进阶】 灾难恢复自动化工具与脚本

灾难恢复自动化工具与脚本 在现代企业中,自动化工具和脚本在灾难恢复(Disaster Recovery, DR)中扮演着至关重要的角色。它们不仅提高了恢复过程的效率和准确性,还减少了人为错误的风险。本文将介绍一些常用的灾难恢复自动化工具及…

「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

本篇将带领你实现一个倒计时和提醒功能的应用,用户可以设置倒计时时间并开始计时。当倒计时结束时,应用会显示提醒。该项目涉及时间控制、状态管理和用户交互,是学习鸿蒙应用开发的绝佳实践项目。 关键词 UI互动应用倒计时器状态管理用户交互…

重装系统后,把Anaconda从硬盘恢复方法(亲测可用)

1.首先保证安装目录文件完整 2.添加系统环境变量 E:\anaconda E:\anaconda\Scripts E:\anaconda\Library\bin E:\anaconda\Library\mingw-w643然后进入安装目录打开cmd命令窗口,输入一下如下命令 python .\Lib\_nsis.py mkmenus4.如果需要cuda恢复,只…

Linux动态库和静态库

1,手动制作静态库 1,如何形成静态库文件 做库时,头文件(.h)必须暴露,源文件(.c)必须隐藏。 操作:将需要形成库的文件编译成.o文件: 然后用指令:ar -rc libmy_stdio.a my_stdio.o my_string.o…

java基础之 String\StringBuffer\ StringBuilder

文章目录 String字符串的创建为什么说String是不可变的?创建后的字符串存储在哪里?字符串的拼接String类的常用方法 StringBuilder & StringBuffer使用方法验证StringBuffer和StringBuilder的线程安全问题 总结三者区别什么情况下用运算符进行字符串…

【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(3)

前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏!…

告别繁琐统计,一键掌握微信数据

微信数据管理的挑战在数字时代,微信已成为我们日常沟通和商业活动的重要工具。然而,随着微信号数量的增加,手动统计每个账号的数据变得越来越繁琐。从好友数量到会话记录,再到转账和红包,每一项都需要耗费大量的时间和…

Oracle分区技术特性

Oracle 的分区是一种“分而治之”的技术,通过将大表、索引分成可以独立管理的、小的 Segment,从而避免了对每个对象作为一个大的、单独的 Segment 进行管理,为海量数据访问提供了可伸缩的性能。自从 Oracle 引入分区技术以来,Orac…

ArkTS常用数据处理:掌握核心技能与实践

在HarmonyOS应用开发中,ArkTS作为主要的开发语言,其数据处理能力是构建高效应用的关键。本文将详细介绍ArkTS中的常用数据处理方法,包括基本数据类型、数组、枚举、对象和XML解析与生成等,以及它们在实际开发中的应用和最佳实践。…