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

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

相关推荐
程序员敲代码吗2 分钟前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash
MX_93596 分钟前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
市场部需要一个软件开发岗位23 分钟前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
历程里程碑36 分钟前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
梦帮科技1 小时前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
程序员泠零澪回家种桔子1 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
CodeCaptain1 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Lois_Luo1 小时前
关闭Win10强制所有应用以管理员身份运行
windows
Anastasiozzzz2 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人2 小时前
通过脚本推送Docker镜像
java·docker·容器