Json读写文件工具类封装

一、概述

在json的读写中主要涉及两种数据类型,字符串和json文件,读取后的数据主要用于传参,由于json文件读取到的数据无法进行直接传参,参数化的数据格式一般为元组格式,所以文件类型的格式读取后还要再做数据类型转换。

二、代码封装详解

下面先创建一个json_tool.py文件:

import json
import osclass JsonTool:def __init__(self, file_path=None):self.file_path = file_pathdef read_from_file(self, file_path=None):"""从指定文件读取 JSON 数据。如果未指定文件路径,则使用初始化时提供的路径。"""path = file_path or self.file_pathif not path:raise ValueError("File path must be provided")try:with open(path, 'r', encoding='utf-8') as file:json_data = json.load(file)# json数据格式转化为列表list_data = []for item in json_data:tmp = tuple(item.values())list_data.append(tmp)return list_dataexcept Exception as e:raise RuntimeError(f"Failed to read JSON from file: {e}")def read_from_string(self, json_string):"""从字符串读取 JSON 数据。"""try:data = json.loads(json_string)return dataexcept Exception as e:raise RuntimeError(f"Failed to read JSON from string: {e}")def write_to_file(self, data, file_path=None):"""将 JSON 数据写入指定文件。如果未指定文件路径,则使用初始化时提供的路径。"""path = file_path or self.file_pathif not path:raise ValueError("File path must be provided")try:with open(path, 'w', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False, indent=4)except Exception as e:raise RuntimeError(f"Failed to write JSON to file: {e}")def delete_file(self, file_path=None):"""删除指定的 JSON 文件。如果未指定文件路径,则使用初始化时提供的路径。"""path = file_path or self.file_pathif not path:raise ValueError("File path must be provided")try:os.remove(path)except Exception as e:raise RuntimeError(f"Failed to delete file: {e}")# Example usage:
if __name__ == "__main__":tool = JsonTool("example.json")# Writing data to filedata = {"name": "John", "age": 30}tool.write_to_file(data)print("Data written to file")# Reading data from filedata_from_file = tool.read_from_file()print("Data from file:", data_from_file)# Reading data from stringjson_string = '{"name": "Jane", "age": 25}'data_from_string = tool.read_from_string(json_string)print("Data from string:", data_from_string)# Deleting the filetool.delete_file()print("File deleted")

 文件基础路径可以在项目根目录下创建配置文件config.py 全局变量一般使用大写

import osBASE_DIR = os.path.dirname(__file__)# print("__file__:", __file__)
print("BASE_DIR:", BASE_DIR)

三、使用举例:

1.写入 JSON 数据到文件

tool = JsonTool("example.json")
data = {"name": "John", "age": 30}
tool.write_to_file(data)
print("Data written to file")

2. 从文件读取 JSON 数据

data_from_file = tool.read_from_file()
print("Data from file:", data_from_file)

3. 从字符串读取 JSON 数据

json_string = '{"name": "Jane", "age": 25}'
data_from_string = tool.read_from_string(json_string)
print("Data from string:", data_from_string)

4. 删除 JSON 文件

tool.delete_file()
print("File deleted")

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

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

相关文章

如何进行数据要素制度建设?

“让数据放心‘供’出来,让更多数据‘活’起来,让数据安全‘动’起来。”11月10日,国家数据局党组书记、局长刘烈宏出席北京数据基础制度先行区启动会议并作重要讲话。 这是刘烈宏履新国家数据局局长以来,首次在公开场合就数据要…

磁力搜索器,磁力链接,磁力狗

磁力链接是一种特殊的下载链接,磁力链接可以理解为一个文件识别码,而并非具体的资源地址,下载软件需要拿着这个识别码去整个互联网(DHT网络)去寻找持有该资源的用户(节点),如果找到则可以进行传输下载。一般年代越久远的磁力链接下…

腾盾科创无人机亮相第二十四届新疆农机博览会引发观展热潮

5月25日,第二十四届新疆农业机械博览会、2024“一带一路”智慧农业大会(以下简称新疆农机博览会)在新疆国际会展中心开幕。展会现场多种农牧业的新装备、新技术集中亮相,其中首次在新疆农机博览会上亮相的腾盾科创无人机产品引发观…

C语言——基于stm32G030的温湿度传感器项目实验

一、功能要求: 设备自检功能: 设备上电自检(检查传感器采集是否正常, DHT11有存在响应, 可以自检使用, )自检通过后,由串口打印设备状态信息。 自动控制功能: 进入自动控…

Clickhouse MergeTree 存储引擎架构总结——Clickhouse 架构篇(二)

文章目录 前言MergeTree存储引擎的三大特点MergeTree 的数据组织MergeTree的文件组织数据文件、元数据文件、索引文件和其他文件分区数据库和表 索引与事务数据库存储引擎的对比存储引擎如何影响查询速度MergeTree存储引擎的工作过程 前言 存储引擎是ClickHouse非常重要的一个…

小易大数据:大数据报告查询领域的黑马,这些优势让你无法忽视!

随着大数据技术被运用到各行各业,风控领域也不例外,形成了基于大数据技术的大数据信用,也就是我们常说的大数据报告或者网贷大数据,在众多的查询平台中,小易大数据平台在市面上是比较受欢迎的,那在小易平台…

windows内存管理

一 windows系统的内存管理涉及哪些 1.1 虚拟内存管理机制 windows操作系统使用虚拟内存技术,将磁盘文件,通过映射对象(存储在物理内存)关联,映射到虚拟内存作为文件试图。即用户操作"虚拟内存中File View Objec…

Spring AOP:使用Spring AOP进行切面编程的实例,解释不同类型的advice(advice类型)以及何时使用它们

I. Spring AOP 简介 AOP的含义和用途: AOP,全称Aspect Oriented Programming,即面向切面编程,是一种编程范式,与面向对象编程(OOP)并列。AOP是一种处理程序中横切关注点的技术,这些横切关注点包括日志记录,安全控制,缓存,事务管理等。 AOP提供了在软件组件的行为…

C-数据结构-树状存储基本概念

‘’’ 树状存储基本概念 深度(层数) 度(子树个数) 叶子 孩子 兄弟 堂兄弟 二叉树: 满二叉树: 完全二叉树: 存储:顺序,链式 树的遍历:按层遍历&#xff0…

Kibana(一张图片胜过千万行日志)

Kibana(一张图片胜过千万行日志) Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。 你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。 你可以轻松地执行高级数据分析&a…

LangChain 0.2 - 基于 SQL 数据构建问答系统

本文翻译整理自:Build a Question/Answering system over SQL data https://python.langchain.com/v0.2/docs/tutorials/sql_qa/ 文章目录 一、项目说明⚠️ 安全说明⚠️架构 二、设置三、Chains1、将问题转换为 SQL查询2、执行 SQL查询3、回答问题 四、Agents1、S…

TiDB学习3:TiKV

目录 1. TiKV架构和作用 2. RocksDB 2.1 写入 2.2 查询 2.3 Column Families列簇 3. 分布式事务 3.1 事务流程 3.2 分布式事务流程 3.3 MVCC 4. Raft与Multi Raft 4.1 Raft日志复制 4.2 Raft Leader选举 5. TiKV- 读写 5.1 数据的写入 5.2 数据的读取ReadIndex …

夏日防晒笔记

1 防晒霜 使用方法:使用前上下摇晃瓶身4至5次,在距离肌肤10至15cm处均匀喷上。如在面部使用,请先喷在掌心再均匀涂抹于面部。排汗量较多时或擦拭肌肤后,请重复涂抹以确保防晒效果。卸除时使用普通洁肤产品洗净即可。

leetcode-主持人调度(二)-110

题目要求 思路 1.先将开始时间和结束时间拆分放到两个数组中进行排序 2.如果开始的时间小于结束时间,说明目前没有空闲的人,需要增加人,如果大于等于,说明有人刚结束了主持,可以进行新的主持了,变更到下一…

winform中通过PictureBox控件显示图像的代码

using System; using System.Drawing; using System.Windows.Forms; namespace DisplayImageExample { public partial class Form1 : Form { private PictureBox pictureBox1 new PictureBox(); public Form1(){InitializeComponent();// 初始化PictureBox控件pictureBox1.S…

驱动开发的分离与分层

1.概念 1.1.分层 分层就是将一个复杂的工作分成了多层, 分而做之,降低难度。在驱动里面,每一层只专注于自己的事情, 系统已经将其中的核心层和事件处理层写好了,我们只需要来写硬件相关的驱动层代码即可。可能驱动里面大家都不是很熟悉,比如…

ubuntu18.04 报错:fatal error: execution

一、问题描述 在ubuntu18.04上编译Faster-lio 报错&#xff1a; fatal error: execution: 没有那个文件或目录#include <execution> 二、解决方法 需要将g编译器更新到9.0 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install g…

深度学习-序列模型

深度学习-序列模型 1. 定义2. 应用领域3. 典型模型4. 技术细节5. 总结 序列模型是一种处理序列数据的机器学习模型&#xff0c;其输入和/或输出通常为序列形式的数据。以下是关于序列模型的详细解释&#xff1a; 1. 定义 序列模型是输入输出均为序列数据的模型&#xff0c;它…

【Django】开发个人博客系统【1】

使用Django开发个人博客系统&#xff0c;博客系统包括用户&#xff08;博主&#xff09;注册和登录、博主资料信息、图片墙功能、留言板功能、文章列表、文章正文内容和Admin后台系统。 1. 项目架构设计 下一步将上述设置写入Django的配置文件settings.py&#xff0c;当Django…

【区分vue2和vue3下的elementUI和elementUI Plus的container组件,介绍如何安装,属性,事件,方法等以及使用案例】

vue2下的Element UI与vue3下的Element Plus的container组件区分 一、Element UI (vue2) 1. 安装 使用npm进行安装&#xff1a; npm install element-ui --save2. Container组件介绍 Container组件用于布局的容器组件&#xff0c;方便快速搭建页面的基本结构。它包含了<…