基于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,

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

相关推荐
考虑考虑25 分钟前
Jpa使用union all
java·spring boot·后端
用户3721574261351 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊2 小时前
Java学习第22天 - 云原生与容器化
java
渣哥4 小时前
原来 Java 里线程安全集合有这么多种
java
间彧4 小时前
Spring Boot集成Spring Security完整指南
java
间彧4 小时前
Spring Secutiy基本原理及工作流程
java
Java水解5 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆7 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学8 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole8 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端