几种常用JSON库的性能测试。
来源:互联网 发布:二级c语言培训班 编辑:程序博客网 时间:2024/06/15 10:52
随着AJAX的火热应用,JSON也越来越被重视,随之而来的就是众多的JSON库,下面对常用的3个JSON库(json-lib,jackson,gson)进行性能测试,看下结果如何:
一. 测试环境
该测试只是在本人电脑上进行测试,每次测试前都重启tomcat,清空缓存,日志等。开的程序也一样,3次测试测试环境相差无几。
json-lib版本:json-lib-2.3-jdk15(最新)
jackson版本 : 1.4.3(最新)
gson : 1.4 (最新)
测试工具:apache带的ab工具
二. 测试代码
1.先定义用于序列化成JSON的Bean,其中字段longTime需要在序列化的过程中被忽略,不输出:
![](Images/OutliningIndicators/ContractedBlock.gif)
2. 因json-lib不能直接设置日期的转换方式,需要写1个Processor的类
![](Images/OutliningIndicators/ContractedBlock.gif)
3. 写1个辅助类JsonTestFactory:
public class JsonTestFactory {
static JsonConfig jc;
static Gson gson;
static ObjectMapper mapper;
public static ObjectMapper getMapper(){
if(mapper == null){
mapper = new ObjectMapper();
SerializationConfig sc = mapper.getSerializationConfig();
sc.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
mapper.setSerializationConfig(sc);
}
return mapper;
}
public static Gson getGson(){
if(gson == null){
GsonBuilder gb = new GsonBuilder();
gb.setDateFormat("yyyy-MM-dd");
gb.excludeFieldsWithoutExposeAnnotation();
gson = gb.create();
}
return gson;
}
public static JsonConfig getJsonConfig() {
if(jc==null){
jc = new JsonConfig();
jc.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));
jc.registerPropertyExclusion(JsonEntity.class,"longTime");
}
return jc;
}
}
static JsonConfig jc;
static Gson gson;
static ObjectMapper mapper;
public static ObjectMapper getMapper(){
if(mapper == null){
mapper = new ObjectMapper();
SerializationConfig sc = mapper.getSerializationConfig();
sc.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
mapper.setSerializationConfig(sc);
}
return mapper;
}
public static Gson getGson(){
if(gson == null){
GsonBuilder gb = new GsonBuilder();
gb.setDateFormat("yyyy-MM-dd");
gb.excludeFieldsWithoutExposeAnnotation();
gson = gb.create();
}
return gson;
}
public static JsonConfig getJsonConfig() {
if(jc==null){
jc = new JsonConfig();
jc.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));
jc.registerPropertyExclusion(JsonEntity.class,"longTime");
}
return jc;
}
}
4、下面是4个JSP页面的代码,json-lib使用了2种不同的方式进行测试:
jsonlib1.jsp 代码:
<%
JsonEntity je = new JsonEntity(1);
out.println(JSONSerializer.toJSON(je,entity.JsonTestFactory.getJsonConfig()).toString());
%>
JsonEntity je = new JsonEntity(1);
out.println(JSONSerializer.toJSON(je,entity.JsonTestFactory.getJsonConfig()).toString());
%>
jsonlib2.jsp 代码:
<%
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
JSONObject json = new JSONObject();
JsonEntity je = new JsonEntity(1);
json.element("id", je.getId());
json.element("name", je.getName());
json.element("money", je.getMoney());
json.element("date", dateFormat.format(je.getDate()));
out.println(json.toString());
%>
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
JSONObject json = new JSONObject();
JsonEntity je = new JsonEntity(1);
json.element("id", je.getId());
json.element("name", je.getName());
json.element("money", je.getMoney());
json.element("date", dateFormat.format(je.getDate()));
out.println(json.toString());
%>
jackson,jsp
<%
JsonEntity je = new JsonEntity(1);
out.println(entity.JsonTestFactory.getMapper().writeValueAsString(je));
%>
JsonEntity je = new JsonEntity(1);
out.println(entity.JsonTestFactory.getMapper().writeValueAsString(je));
%>
gson.jsp
<%
JsonEntity je = new JsonEntity(1);
out.println(entity.JsonTestFactory.getGson().toJson(je));
%>
JsonEntity je = new JsonEntity(1);
out.println(entity.JsonTestFactory.getGson().toJson(je));
%>
三、测试结果
测试结果中只需关注Requests per second(平均每秒处理的请求数),Time per request(平均每个请求处理的时间)
1、ab 测试条件: 发送5000个请求,并发数为10。
1、ab 测试条件: 发送30000个请求,并发数为50。
google的gson传说性能比较好,不知道为什么这次测试性能这么有问题。jackson的还是非常不错的。
- 几种常用JSON库的性能测试。
- 几种常用JSON库性能比较
- 几种常用JSON库性能比较
- 几个常用JSON组件的性能测试
- 几种常用的JSON解析法
- 几种脚本语言的性能简单测试
- 几种排序的性能测试
- 软件性能测试的几种方法
- 几种常用的软件测试工具
- Json与Java间传参常用的几种方式
- Json与Java间传参常用的几种方式
- 常用的性能测试方法
- 常用的性能测试指标
- 关于ruby几种String连接性能的小测试
- 银行中间业务平台的几种性能测试方案
- openfire服务器性能测试的几种方法
- openfire服务器性能测试的几种方法
- 替代反射调用的几种方式及性能测试
- 推荐博客URL
- event.keycode值大全
- 为了记下岁月的痕迹
- bulk insert 导入文件为时间变量
- Java语言如何访问不同字符集的Oracle数据
- 几种常用JSON库的性能测试。
- C语言图形编程(三、绘图函数-01)
- asp.net里动态设置meta标签优化
- .Net中FckEditor的配置和使用方法(含示例源码)
- 启用Gzip
- linux grep命令,强大的文本搜索
- bash 杯具2个
- FileUpLoad上传图片
- Server2008 如何修改密码