赞
踩
在对一个30mjson数据解析的过程中遇到的诸多问题与对应采用到的解决方法记录。最后的解决方案是更换解析JSON工具类以及提高工具类的版本,并且拆分数据最后从5-10秒优化到几十毫秒。
目前主要有的的json工具类主要有阿里巴巴的FastJson、Google的Gson以及用来序列化和反序列化json的Java开源框架Jackson。对比以上三种常见的json处理工具类,各自特点也不同。
FastJson是由阿里巴巴开发的不需要额外的Jar包,可以直接在JDK上运行,但是遇到一些引用数据类型的转换时比较容易出现错误,因此需要定制化的对部分引用类型比如LocalDate和LocalDateTime等等其他数据类型配合@JSONFormat等注解使用。
Gson是有Google的JSON工具类不需要额外的jar包,但是转换的时候需要创建好对象的类型才能将json字符串转换为对应的实体对象。Gson可以实现复杂的json到Bean以及Bean到json的转换。
Spring MVC的默认json解析器便是Jackson。Jackson 所依赖的jar包较少,简单易用。与其他Java的json的框架Gson等相比,Jackson解析大的json文件速度比较快,Jackson运行时占用内存比较低,性能比较好,Jackson有灵活的API,可以很容易进行扩展和定制。
遇到大数据量的json数据以及复杂的数据类型时,可以将三种解析json的工具类同时使用一下,多次测试,比较其中工具类解析json的速度来选择合适的JSON工具类使用。
注意:JSON工具类的版本不同,其底层实现逻辑不同,性能也会有很大的差异,用5M数据测试,FastJSON 1.0版本需要3到5秒,FastJSON 2.0仅仅需要几十毫秒。
将json文件看成树形结构的话,找到最底层的多个分支,合理的人为设置主键id对应的数据节点关系,将其拆解为多张表对应的关系,节点上只留id的部分,在数据库中存储的过程中也可把一些简单的数组转化为json字符串存储以此来减小大数据json文件的转换时间,将解析数据的时间放到组装json的过程中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。