基于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 …...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...
