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

2024-05-25 08:53:06 浏览数 (3)

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

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

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

以导出用户数据为例:

数据模型如下:

代码语言:javascript复制
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文件:

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

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

代码语言:javascript复制
     /**
     * 导入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);
    }

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

代码语言:javascript复制
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,

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

1 人点赞