前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于FastJson实现Json数据文件导入导出解析

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

作者头像
灰小猿
发布2024-05-25 08:53:06
570
发布2024-05-25 08:53:06
举报

哈喽,大家好,我是灰小猿,一个超会写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,

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档