基于FastJson实现Json数据文件导入导出解析

哈喽,大家好,我是灰小猿,一个超会写bug的程序猿!

今天来记录一个在项目实战中比较实用的方法,主要是针对一些需要存在简单数据文件导入导出的场景,如:数据文件的简单备份、软件升版前后配置导入导出等场景

这个方法可以作为一个工具类来使用,可以将想要导出成文件的数据通过导出方法直接导出为json或ini文件,也可以将导出的文件直接通过导入方法进行解析,返回原先的数据模型。

以导出用户数据为例:

数据模型如下:

java 复制代码
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文件:

java 复制代码
    /**
     * 导出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();
        }
    }

之后如果需要再次将导出的数据导入到软件,只需要导入该文件,下述方法将会自动解析文件并将数据返回出去:

java 复制代码
     /**
     * 导入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);
    }

在实际使用中的调用方法如下:

java 复制代码
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,

以上就是本期工具类的分享,我们下期见!

相关推荐
一只小青团4 小时前
Python之面向对象和类
java·开发语言
qq_529835355 小时前
ThreadLocal内存泄漏 强引用vs弱引用
java·开发语言·jvm
落笔画忧愁e5 小时前
扣子Coze飞书多维表插件添加数据记录
java·服务器·飞书
秋千码途7 小时前
小架构step系列08:logback.xml的配置
xml·java·logback
飞翔的佩奇7 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
LCG元7 小时前
Windows实时内核驱动的数据捕获接口:高精度时钟与零拷贝的架构剖析
windows·架构
时来天地皆同力.8 小时前
Java面试基础:概念
java·开发语言·jvm
找不到、了8 小时前
Spring的Bean原型模式下的使用
java·spring·原型模式
阿华的代码王国8 小时前
【Android】搭配安卓环境及设备连接
android·java
YuTaoShao9 小时前
【LeetCode 热题 100】141. 环形链表——快慢指针
java·算法·leetcode·链表