将json文件转化为java对象的编写

公司老大给了个任务,让我将MongoDB一个Collection中的数据导入另一个库中的Collection,我一开始以为不怎么难,但是,一查数据才发现问题,我去2千万条.我花了半天的时间搞完了也可以用了(不得不夸一下MongoDB,确实强大).接下问题又来了,老大又让我插入以前丢掉的数据.这才是难题,所有的数据都是json文件,这些文件总共600M左右,而且与MongoDB中的数据格式还不一样.一开始以为完了.但是功夫怕有心人,搞了一天最终还是搞出来了.我的大体思路是这样的首先我要找到所有的json文件然后读取这些文件的内容,将这些内容通过Gson转化Map,然后就可以封装了.下面是我具体的实现,有需要的可以拿去用,有问题的也可以问我.

一.找到json文件

找到文件我是通过一个简单的递归找到的.传的参数为你存放Json的文件夹,尽量准确因为递归次数多的话效率会很底

//递归遍历得到json文件
public static void getFiles(String filePath) throws IOException {
    File root = new File(filePath);
    //判断第一次输入的是否为文件夹
    if (root.isDirectory()) {
        //获取给文件夹下的所有File
        File[] files = root.listFiles();
        //遍历
        for (File file : files) {
            //判断是否文件夹
            if (file.isDirectory()) {
                //是文件夹的话进行递归
                getFiles(file.getAbsolutePath());
            } else {
                //判断是文件的名字是否包含json
                if (file.getAbsolutePath().contains("json")) {
                    try {
                       //可以通过流读取json文件的内容,并转化为Map,在转化为实体类
                        log.info("{}","添加中");
                    }catch (Exception e){
                        //如果发生异常退出虚拟机并打印出现异常的文件
                        e.printStackTrace();
                        log.error("{}","添加数据出现异常的文件为:"+file.getAbsolutePath());
                        System.exit(0);
                    }
                }
            }
        }
    } else {
        if (root.getAbsolutePath().contains("json")) {
            try {
               //可以通过流读取json文件的内容,并转化为Map,在转化为实体类
                log.info("{}","添加中");
            }catch (Exception e){
                e.printStackTrace();
                log.error("{}","添加数据出现异常的文件为:"+root.getAbsolutePath());
                //如果发生异常退出虚拟机并打印出现异常的文件
                System.exit(0);
            }
        }
    }

}
二、利用Gson转化为map
对于还没有用过Gson的伙伴我觉的这一篇文章写的不错,可以阅读Gson的简单使用
下面就直接开搞了1
1.创建Gson对象
Gson gson = new GsonBuilder()
        .serializeNulls()   //序列化null 可导出
        .excludeFieldsWithoutExposeAnnotation()  //@Expose  导出数据
        .create();
在转换Map的时候要在实体类的属性上加注解
@SerializedName("year")
@Expose
private String year;
二.读取json文件的内容并将json文件中的json数据转化为Map
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(filePath)));
int line = 1;
String context = null;
String json = null;
//json内容转化为Map集合通过遍历集合来进行封装
while ((context = bufferedReader.readLine()) != null) {
	//Context就是读到的json数据
	json += context;
	line++;
}
//利用Gson对象将json数据转换为Map
	Map result = (Map)gson.fromJson(json, Map.class);
//这就将Json转换为Map了.
	Student Student = gson.fromJson(json,Student.class);
//将json对象转化为了对象
下来就要看你的怎么用了,在这里还会有许多问题因为你的json数据格式决定这你的Map里面的格式,但是我总结了一下碰到{}
是转化为Map,碰到[]转化为List.所以在你的转化的Map中可能有Map,也可能有List.



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值