已上传 github: https://github.com/mikylin-pr...java
Maven : 3.3.9 (主要用做打包工具)
IDE : idea 2018.3
JDK : OpenJDK 11.0.1 (OracleJDK 8 以上便可)git
Litjson 是笔者读了 Gson 源码以后的业余之做,基本思路仿造了 Gson,可是功能上作了很多精简,仅仅能适用于比较标准的 json 字符串和 java 对象的互转。github
Litjson 在测试当中兼容性表现良好,可是执行效率不如预期(不及 Gson),笔者一度想要放弃该项目,可是造轮子不易,既然造了就稍微聊一聊吧,欢迎探讨进步。json
Litjson 可使用组件 OptionBox 进行各类参数的修改,OptionBox 由其静态内部类 OptionBoxBuildr 建立:安全
//建立一个 builder OptionBox.OptionBoxBuilder boxBuilder = OptionBox.OptionBoxBuilder.builder(); //使用 builder 建立 OptionBox OptionBox box = boxBuilder //在 json 字符串反序列化过程当中要忽略的字符 //默认会忽略空字符串和换行符等字符类型 .addIgnoreChar('c') //传入一个 List<Character>,批量设置忽略字符 .addIgnoreChars(chars) //在 json 字符串反序列化过程当中须要识别的日期格式,默认仅有一种 yyyy-MM-dd HH:mm:ss .addReadDateFormat("yyyy-mm-dd") //传入一个 List<DateFormat>,批量设置识别的日期格式 .addReadDateFormats(dateformats) //TypeHandler 为类型转换器 //使用者能够自定义须要使用的类型转换器,并以 map 的格式传入 //默认只有 Integer/Long/String/Double/Float/Date 这几种类型 .addTypeHandlers(handlerMap) //在将 java bean 序列化的过程当中使用单引号仍是双引号 //true 为双引号,false 为单引号,不设置的时候默认为 true .isQoubleQuotationMarks(true) //在将 java bean 序列化的过程当中须要转的日期格式 //默认为 yyyy-MM-dd HH:mm:ss .writeDateFormat(dateformat) //建立 OptionBox .over();
OptionBox 的功能目前较少,后期补充。并发
TypeHandler 是一个 Listjson 中的接口,使用者能够自行实现该接口用以解析须要的类型,做用相似 Gson 中的 TypeAdapter:ide
public interface TypeHandler<T> { T read(String value); String write(T t); }
!!!自定义 TypeHandler 的功能仅为预留,暂未作支持。高并发
JReader 是 Litjson 中用于读取 json 字符串(反序列化)的组件,提供多种构造器进行建立:工具
//配置盒 OptionBox box = OptionBox.OptionBoxBuilder.builder().over(); //JReader 的辅助工具类,使用配置盒进行建立 ReadManager readManager = new ReadManager(box); //第一个参数为 json 字符串 //第二个参数是须要读成的 java class 类型 //第三个参数表示 是否为列表,true 表明是列表,false 表明是 object //若是第三个参数为 true,则 classType 会表示成列表内的泛型类型 //第四个参数是 readManager JReader jReader = new JReader(jsonString,classType,true,readManager); //只传入 json 字符串,会输出一个 map,若是字符串自己是一个列表的话会报错 //不传入 readManager,配置均使用默认 JReader jReader1 = new JReader(jsonString); //同上,只是会输出成一个 java class 类型 JReader jReader2 = new JReader(jsonString,classType); //输出成一个列表 JReader jReader3 = new JReader(jsonString,classType,true); //输出对象,参数设置必须为输出非列表 Object o = jReader.toObj(); //输出列表对象,参数设置必须为输出列表 List list = jReader.toArray();
JWriter 是 Litjson 中用于输出 json 字符串(序列化)的组件,提供多种构造器进行建立:测试
//配置盒 OptionBox box = OptionBox.OptionBoxBuilder.builder().over(); //JWriter 的辅助工具类,使用配置盒进行建立 WriteManager writeManager = new WriteManager(box); //第一个参数为要序列化的对象 //第二个参数是 writeManager JWriter jWriter = new JWriter(object,writeManager); //只传入对象,不传入 writeManager,配置均使用默认 JWriter jWriter1 = new JWriter(object); //输出 json 字符串 String json = jWriter.toJson();
介于通常情景下快速开发的需求,笔者参考了 Fastjson 的使用以后给 JReader 和 JWriter 整合了一个静态门面类供使用者更加方便的调用:
//json 字符串的反序列化过程 Object obj = JSONBootstrap.read(jsonString); //加入指定类型的反序列化 T obj = JSONBootstrap.read(jsonString,class<T>); //java bean 序列化过程 String json = JSONBootstrap.write(obj);
0 截止到 version 0.0.1,使用 IDEA 的 Statistic 插件统计共计约 2400 行 java 代码 1 Litjson 的使用须要使用到 java bean 的无参构造器和参数的 get/set 方法,没有的话在反射建立阶段就会报错 2 现阶段支持的类型还不多,只能支持 java bean/Map/Collection/Integer/Long/Float/Double/String/Date 3 高并发下的 DateFormat 存在线程安全问题 4 笔者对项目总体性把握的功力还太浅,体如今对象封装、错误管理等各方面,有待后期完善 5 春节假期的自 high 做品,随缘维护,谨慎用于生产环境 6 造轮子使我快乐