当前位置: 首页 > 科技观察

Java中常用json库性能对比,常见Json库使用示例代码

时间:2023-03-16 02:08:22 科技观察

前言在restful风格流行的今天,json想必大家都不陌生。JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。便于人类阅读和书写。机器也很容易解析和生成。在Java中,有很多json库,比如阿里巴巴的fastjson,谷歌的gson等等。那么,他们之间的表现如何呢?下面通过实际例子来分析一下。原创声明本文首发于头条号【Happyjava】https://www.toutiao.com/c/user/85644464579/欢迎转载,但必须保留此声明。对比使用的库与4个json库进行对比,分别是:FastJson、Gson、Jackson。比较方法主要从开发中常用的几个方面入手,如下:1.Java对象转json字符串2.集合对象转json字符串3、字符串转json对象4、字符串转java对象5、转stringtojsonarray6、convertstringtojavaset每次操作,重复计算1000000次提高性能比较。结果对比从结果来看,fastjson的速度最快,gson的速度最慢,这也是它被昵称为“龟儿子”的原因。三个库的对比jackson是SpringMVC默认的json转换库,稳定性好,性能也不错。fastjson的速度是最快的,但是版本迭代快,但是经常会出现漏洞。如果是比较保守的项目,比如银行政府项目,不建议使用。但是fastjson的api设计是所有json库中最优雅方便的。Gson是google出品的,但是速度比较慢。Java对象Person.java@DatapublicclassPerson{privateIntegerid;privateStringusername;privateIntegerage;privateStringaddress;}fastjson测试使用的是fastjson1.2.58版本,是目前最新的fastjson版本。测试代码如下:publicstaticvoidmain(String[]args){//constructobjectPersonperson=newPerson();person.setId(99999);person.setUsername("Happyjava");person.setAddress("广东省广州市Province,ShanghaiCity,BeijingCity,ShenzhenCity,GuangdongProvince,HangzhouCity,ZhejiangProvince,";person.setAge(100);//Java对象转成json字符串longstart=System.currentTimeMillis();for(inti=0;i<1000000;i++){Stringstring=JSON.toJSONString(person);}System.out.println("Java对象转json字符串需要时间:"+(System.currentTimeMillis()-start)+"ms");//集合对象转成json字符串Listlist=newArrayList<>();for(inti=0;i<100;i++){list.add(人);}start=System.currentTimeMillis();for(inti=0;i<1000000;i++){Stringstring=JSON.toJSONString(list);}System.out.println("集合对象转json字符串需要时间:"+(System.currentTimeMillis()-start)+"ms");//串成json对象start=System.currentTimeMillis();StringjsonsString=JSON.toJSONString(person);for(inti=0;i<1000000;i++){JSONObjectjsonObject=JSON.parseObject(jsonsString);}System.out.println("字符串转json对象需要时间:"+(System.currentTimeMillis()-start)+"ms");//字符串转java对象start=System.currentTimeMillis();for(inti=0;i<1000000;i++){Personperson1=JSON.parseObject(jsonsString,Person.class);}System.out.println("将字符串转换为java对象需要时间:"+(System.currentTimeMillis()-start)+"ms");//字符串转json数组start=System.currentTimeMillis();StringjsonArrayStr=JSON.toJSONString(list);for(inti=0;i<1000000;i++){JSONArrayobjects=JSON.parseArray(jsonArrayStr);}System.out.println("字符串转json数组需要时间:"+(System.currentTimeMillis()-start)+"ms");//将字符串转换为java集合start=System.currentTimeMillis();for(inti=0;i<1000000;i++){Listlist1=JSON.parseArray(jsonArrayStr,Person.class);}System.out.println("字符串转换成java集合时间:"+(System.currentTimeMillis()-start)+"ms");}结果如下:Time-consumingJava对象转json字符串耗时:625ms集合对象转json字符串耗时:7161ms字符串转json对象耗时:640ms字符串转java对象耗时:296ms将字符串转换为json数组:17437ms字符串转java集合需要时间:28611msgson测试使用的是2.8.5版本,也是目前最新的版本测试代码如下:privatestaticGsongson=newGson();publicstaticvoidmain(String[]args){//构造对象Personperson=newPerson();person.setId(99999);person.setUsername("Happyjava");person.setAddress("广东省广州市,上海市,北京市,广东省深圳市,浙江省杭州市,");person.setAge(100);//java对象转成json字符串longstart=System.currentTimeMillis();for(inti=0;i<1000000;i++){Stringstring=gson.toJson(person);}System.out.println("Java对象转json字符串需要时间:"+(System.currentTimeMillis()-start)+"ms");//集合对象转成json字符串Listlist=newArrayList<>();for(inti=0;i<100;i++){list.add(person);}start=System.currentTimeMillis();for(inti=0;i<1000000;i++){Stringstring=gson.toJson(list);}System.out.println("集合对象转成json字符串需要时间:"+(System.currentTimeMillis()-start)+"ms");//Stringis转换成json对象start=System.currentTimeMillis();StringjsonsString=gson.toJson(person);for(inti=0;i<1000000;i++){JsonObjectjsonObject=gson.fromJson(jsonsString,JsonObject.class);}System.out.println("将字符串转为json对象需要时间:"+(System.currentTimeMillis()-start)+"ms");//将字符串转为json对象javaobjectstart=System.currentTimeMillis();for(inti=0;i<1000000;i++){Personperson1=gson.fromJson(jsonsString,Person.class);}System.out.println("字符串转换耗时intojavaobjects:"+(System.currentTimeMillis()-start)+"ms");//将字符串转成json数组start=System.currentTimeMillis();StringjsonArrayStr=gson.toJson(list);for(inti=0;i<1000000;i++){JsonArrayobjects=gson.fromJson(jsonArrayStr,JsonArray.class);}System.out.println("字符串转json数组需要时间:"+(System.currentTimeMillis()-start)+"ms");//字符串转成java集合Typetype=newTypeToken>(){}.getType();start=System.currentTimeMillis();for(inti=0;i<1000000;i++){Listlist1=gson.fromJson(jsonArrayStr,type);}System.out.println("将字符串转成ja需要时间vacollection:"+(System.currentTimeMillis()-start)+"ms");}}测试结果如下:Java对象转化为json字符串耗时:1244ms集合对象转json字符串耗时:86041ms字符串转json对象耗时:1009ms字符串转java对象耗时:793ms字符串转json数组耗时:字符62112ms字符串转java集合耗时:51087msJackson测试测试代码如下:publicstaticvoidmain(String[]args)throwsException{ObjectMappermapper=newObjectMapper();//构造对象Personperson=newPerson();person.setId(99999);person.setUsername("Happyjava");person.setAddress("广东省广州市,上海市,北京市,广东省深圳市,杭州市浙江省城市,");person.setAge(100);//Java对象转jsonStringlongstart=System.currentTimeMillis();for(inti=0;i<1000000;i++){Stringstring=mapper.writeValueAsString(person);}System.out.println("Ja转换需要时间va对象转成json串:"+(System.currentTimeMillis()-start)+"ms");//集合对象转成json串Listlist=newArrayList<>();for(inti=0;i<100;i++){list.add(person);}start=System.currentTimeMillis();for(inti=0;i<1000000;i++){Stringstring=mapper.writeValueAsString(list);}System.out.println("集合对象转换成json字符串需要时间:"+(System.currentTimeMillis()-start)+"ms");//字符串转换成json对象ObjectNode.class);}System.out.println("字符串转json对象需要时间:"+(System.currentTimeMillis()-start)+"ms");//将字符串转为json对象javaobjectstart=System.currentTimeMillis();for(inti=0;i<1000000;i++){Personperson1=mapper.readValue(jsonsString,Person.class);}System.out.println("转换a需要时间stringintoajavaobject:"+(System.currentTimeMillis()-start)+"ms");//将string转为json数组start=System.currentTimeMillis();StringjsonArrayStr=mapper.writeValueAsString(list);for(inti=0;i<1000000;i++){ArrayNodeearrayNode=mapper.readValue(jsonArrayStr,ArrayNode.class);}System.out.println("将字符串转为json数组需要时间:"+(System.currentTimeMillis()-start)+"ms");//字符串转成java集合start=System.currentTimeMillis();JavaTypejavaType=mapper.getTypeFactory().constructtParametricType(List.class,Person.class);for(inti=0;i<1000000;i++){Listlist1=mapper.readValue(jsonArrayStr,javaType);}System.out.println("字符串转换它成为java集合耗时:"+(System.currentTimeMillis()-start)+"ms");}测试结果如下:Java对象转json字符串耗时:641msTime-集合对象转json字符串耗时:21238ms字符串转json对象耗时:742ms字符串转java对象耗时:680ms字符串转json数组耗时:48641ms字符串到java集合中:44791ms