基于FastJson实现Json数据文件导入导出解析
哈喽,大家好,我是灰小猿,一个超会写bug的程序猿!
今天来记录一个在项目实战中比较实用的方法,主要是针对一些需要存在简单数据文件导入导出的场景,如:数据文件的简单备份、软件升版前后配置导入导出等场景
这个方法可以作为一个工具类来使用,可以将想要导出成文件的数据通过导出方法直接导出为json或ini文件,也可以将导出的文件直接通过导入方法进行解析,返回原先的数据模型。
以导出用户数据为例:
数据模型如下:
import lombok.Data;
import lombok.ToString;@Data
@ToString
public class User {private String address;private String tel;private int number;private boolean can;
}
首先通过导出方法,将数据导出为json或ini文件:
/*** 导出json文件*/public static void exportJsonFile(String jsonData, String exportPath) {// 生成json格式文件try {// 保证创建一个新文件File file = new File(exportPath);if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}if (file.exists()) {file.delete();}file.createNewFile();// 将格式化后的字符串写入文件Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");write.write(jsonData);write.flush();write.close();} catch (Exception e) {e.printStackTrace();}}
之后如果需要再次将导出的数据导入到软件,只需要导入该文件,下述方法将会自动解析文件并将数据返回出去:
/*** 导入json文件*/public static Object importJsonFile(String importFilePath) {File file = new File(importFilePath);int ch;String jsonStr = "";try (Reader reader = new InputStreamReader(new FileInputStream(file), "Utf-8");) {StringBuffer sb = new StringBuffer();while ((ch = reader.read()) != -1) {sb.append((char) ch);}jsonStr = sb.toString();System.out.println(JSON.parseObject(jsonStr));} catch (Exception e) {e.printStackTrace();}return JSON.parseObject(jsonStr);}
在实际使用中的调用方法如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hirain.model.User;
import lombok.extern.slf4j.Slf4j;import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Slf4j
public class JsonFileUtils {public static void main(String[] args) {Map<String, Object> jsonMap = new HashMap<>();jsonMap.put("name", "name1");jsonMap.put("age", 20);jsonMap.put("sex", true);User user = new User();user.setAddress("深圳");user.setCan(true);user.setTel("123456");user.setNumber(110);User user2 = new User();user2.setAddress("广州");user2.setCan(false);user2.setTel("888888");user2.setNumber(666);List<User> users = new ArrayList<>();users.add(user);users.add(user2);jsonMap.put("userInfo", users);String jsonData = JSON.toJSONString(jsonMap);//文件输出路径String exportFilePath = "D:\\下载\\testjson.json";exportJsonFile(jsonData, exportFilePath);log.info("导出成功");//解析文件实现导入Map<String, Object> jsonMap2 = (Map<String, Object>) importJsonFile(exportFilePath);System.out.println(jsonMap2.toString());Object userInfo = jsonMap2.get("userInfo");List<User> userJsonList = JSONObject.parseArray(userInfo.toString(), User.class);System.out.println(userJsonList.toString());log.info("导入成功");}}
上面的方法是以导出json文件为例,如果想要导出ini文件,只需要将文件的后缀名修改一下即可。
在上述方法中,保存到文本的数据是一个map集合,其中存放了多种类型的数据,包括基本的数据类型,以及复杂的对象集合,解析文件之后可以正常拿到这个map集合,并且通过key可以拿到对应的value,
以上就是本期工具类的分享,我们下期见!
相关文章:
基于FastJson实现Json数据文件导入导出解析
哈喽,大家好,我是灰小猿,一个超会写bug的程序猿! 今天来记录一个在项目实战中比较实用的方法,主要是针对一些需要存在简单数据文件导入导出的场景,如:数据文件的简单备份、软件升版前后配置导入…...
JVM内存分配与垃圾收集流程
3.8 实战:内存分配与回收策略 3.8.1 对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。 3.8.2 大对象直接进入老年代 HotSpot虚拟机提供了-XX:Prete…...
【python】yaml转成json
姊妹篇:【python】json转成成yaml yaml数据: address:city: 北京市postalCode: 100000street: 北京路123号 age: 30 cart: - product:name: 笔记本电脑price: 1199.99quantity: 2 - product:name: 智能手机price: 599.99quantity: 1 children: - age: …...
css5定位
css 一.定位1.概念(定位定位模式边位移)2.静态位移static(不常用)3.相对定位relative(不脱标)(占位置)4.绝对定位absolute(脱标)(不占位置&#x…...
【解决】修改 UI界面渲染层级 的常见误区
开发平台:Unity 2021版本 问题描述 Unity 中管理 UI 上显示元素的前后层级关系大致为以下两种方式: 方式一:修改UI元素队列顺序与层级方式二:使用 Canvas 组件中的 Override Sort 属性配置 方式二 对应复杂的 UI 层级关系将常…...
蓝桥杯练习系统(算法训练)ALGO-995 24点
资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数…...
汽车电子笔记:BootLoader升级过程疑难问题解决方式(Bootloader响应10 02 + 刷死拯救机制)
目录 1、概述 2、如何在BootLoader响应10 02 2.1、实现流程图 2.2、实现方式(代码思路) 3、刷死拯救机制(100%能救活,适配各类控制器...
高级RAG:揭秘PDF解析
原文地址:https://pub.towardsai.net/advanced-rag-02-unveiling-pdf-parsing-b84ae866344e 2024 年 2 月 3 日 附加内容:揭秘PDF解析:如何从科学pdf论文中提取公式 对于RAG,从文档中提取信息是一个不可避免的场景。确保从源头…...
Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)
前言 学习UiDevice对象,就需要看它的构造方法,构造方法中有UiDevice对象持有一些对象,每个对象都是我们分析程序的重点,毕竟UiDevice对象的功能,依赖这些组合的对象 备注:当前对象持有的对象,初…...
【C语言】指针初阶2.0版本
这篇博文我们来继续学习指针的其他内容 指针2.0 传值调用与传址调用传值调用传址调用 一维数组与指针理解数组名使用指针深入理解一维数组 二级指针指针数组二维数组与指针 传值调用与传址调用 在开始之前,我们需要先了解这个概念,后面才能够正常的学习…...
小红书关键词爬虫
标题 1 统计要收集的关键词,制作一个文件夹2 爬取每一页的内容3 爬取标题和内容4 如果内容可以被查看,爬取评论内容5 将结果进行汇总,并且每个帖子保存为一个json文件,具体内容6 总结 1 统计要收集的关键词,制作一个文…...
网络爬虫的危害,如何有效的防止非法利用
近年来,不法分子利用“爬虫”软件收集公民隐私数据案件屡见不鲜。2023年8月23日,北京市高级人民法院召开北京法院侵犯公民个人信息犯罪案件审判情况新闻通报会,通报侵犯公民个人隐私信息案件审判情况,并发布典型案例。在这些典型案…...
2024/2/29 备战蓝桥杯 6-1 二分
目录 查找 【深基13.例1】查找 - 洛谷 数对 A-B 数对 - 洛谷 砍树 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 参考连接:AcWing 789. 数的范围---二分法一次搞懂 - AcWing 1.程序中不要同时出现l mid, r mdi这两条语句。 2.如过程序中出现了l mid࿰…...
浅析ARMv8体系结构:原子操作
文章目录 概述LL/SC机制独占内存访问指令多字节独占内存访问指令 独占监视器经典自旋锁实现 LSE机制原子内存操作指令CAS指令交换指令 相关参考 概述 在编程中,当多个处理器或线程访问共享数据,并且至少有一个正在写入时,操作必须是原子的&a…...
综合练习(二)
目录 列出薪金比 SMITH 或 ALLEN 多的所有员工的编号、姓名、部门名称、领导姓名、部门人数,以及所在部门的平均工资、最高和最低工资 补充 spool Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 列出薪金比 SMITH 或 AL…...
sql-labs第46关(order by盲注脚本)
一、环境 网上有自己找 二、解释 order by 注入我们看他的true和false来进行注入出来 二、实操 让我们用sort 看看源码 最终我们的id是放到order by后面了 如果我们直接用列去排序 ?sortusername/password username: password: 可以看到顺序是不…...
13款可以轻松上手画图软件推荐
在当今的数字世界里,我们有各种各样的创作工具,尤其是画图软件。所以问题来了:我们应该如何选择许多免费的绘画软件?为了回答这个问题,我们将在本文中分享10个领先的画图软件。每一个都有其独特的特点和优势࿰…...
vue实现商品评分效果(通过插件实现)
Vue.js 实现了一个简单的商品评分功能。用户可以通过点击星星来修改商品的评分,并且评分显示了相应的星星数。 废话不多说,直接上代码 方法一: <template><div><avue-form :model"formData"><avue-form-it…...
SpringBoot 手写 Starter
spring-boot-starter 模块 1.介绍 SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配…...
C++ 学习笔记(Structured bindings)
C 学习笔记(Structured bindings) 这个特性是 C17 引入的,个人认为主要是解决如何让函数返回多个值的问题。在这之前,我们一般用 std::pair 或者 std::tuple 来返回多个值。比如下面的例子: std::tuple<int, int …...
企业AI应用开发:三步搞定智能体落地
别被概念绕晕了,企业AI应用其实可以很简单很多技术团队对AI智能体存在误解:要么觉得太复杂无从下手,要么觉得需要大量代码开发。实际上,企业AI应用的开发门槛已经大幅降低。本文用最简洁的方式,讲清楚企业智能体的开发…...
RHEL 7.3 (x86_64) 更换国内 YUM 源
兴趣原因,在本地部署了一台VBox虚拟机,安装了Redhat7.3版本,由于无法正常使用yum源,于是便修改成国内的源,在网上找了搜索了许多的更换教程,略有繁琐,现将我自己的更换方法记录如下,…...
第三节 SVPWM仿真实战:从扇区判断到PWM波生成的完整建模解析
1. SVPWM仿真实战:从理论到模型的完整闭环 第一次接触SVPWM仿真时,我被各种坐标变换和扇区判断绕得头晕。直到在电机控制项目中亲手搭建了完整的Simulink模型,才发现核心逻辑其实就藏在几个关键模块里。这次我们就用"搭积木"的方式…...
springboot基于SpringBoot的养老中心管理系统_i9o9c8r5
前言 基于SpringBoot的养老中心管理系统是一款专为养老机构设计的综合性信息化管理平台,旨在通过数字化手段优化养老服务流程、提升管理效率、保障老人安全与健康,同时增强家属与养老中心的互动。一、项目介绍 开发语言:Java 框架:…...
优峰技术:中心波长可调滤波器在光通信测试中的应用与选型
在1.6T光模块、CPO、DWDM系统快速发展的今天,中心波长可调滤波器已经成为光通信测试、光谱分析、信道筛选的关键器件。作为光通信测试领域深耕多年的企业,深圳优峰技术结合国际主流产品标准与自研技术,推出高性能中心波长可调滤波器及配套测试…...
ASL-ML-Immersion时间序列预测:从数据探索到Keras建模的完整流程
ASL-ML-Immersion时间序列预测:从数据探索到Keras建模的完整流程 【免费下载链接】asl-ml-immersion This repos contains notebooks for the Advanced Solutions Lab: ML Immersion 项目地址: https://gitcode.com/gh_mirrors/as/asl-ml-immersion ASL-ML-I…...
AI 英语阅读 APP的开发
开发一款 AI 英语阅读 APP 在 2026 年的核心逻辑已从“电子书查词”转变为“内容动态生成与理解增强”。这种应用的核心竞争力在于能根据用户的实时掌握情况,自动调整文本的难度、背景和互动方式。以下是该项目的核心开发流程与关键技术模块:1. 核心功能…...
2026数据中台选型指南:从“建平台”到“用数据”,数据治理智能化如何破解落地困局?
一个略显尴尬的现实正在不少企业的数据中台项目中上演:平台建好了,数据接入了,报表也跑起来了,但业务部门的使用热情却在逐渐消退。究其原因,不是数据不够多,而是“数据不好用”——指标口径对不齐、数据质…...
解决PyTorch与TorchVision版本冲突:从依赖管理到环境隔离的实战指南
1. 为什么PyTorch和TorchVision总是打架? 每次看到"ERROR: Cannot install torch>1.8.0 and torchvision0.9.2cu102 because these package versions have conflicting dependencies"这种报错,我都想砸键盘。这就像买了个新手机,…...
网盘直链下载助手:八大网盘一键解析,告别限速烦恼的终极解决方案
网盘直链下载助手:八大网盘一键解析,告别限速烦恼的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 …...
