jsonlib的性能请看这篇文章:http://wangym.iteye.com/blog/738933
性能总结 写道
测试总结:
1、显而易见,无论是哪种形式的转换,Jackson > Gson > Json-lib。
Jackson的处理能力甚至高出Json-lib有10倍左右
2、JSON-lib似乎已经停止更新,最新的版本也是基于JDK15,而Jackson的社区则较为活跃;
3、在测试性能的同时,又以人肉方式对这三个类库转换的正确性 进行了检查 ,三者均达100%正确 ;
4、JSON-lib在转换诸如Date类型时较为累赘,如以下是两者的转换结果:
JSON-lib:
{"brithday":{"date":17,"day":2,"hours":9,"minutes":24,"month":7,"seconds":26,"time":1282008266398,"timezoneOffset":-480,"year":110}}
Jackson:
{"brithday":1282008123101}
5、JSON-lib依赖commons系列的包及 ezmorph包共 5个,而Jackson除自身的以外只依赖于commons-logging
6、Jackson提供完整基于节点的Tree Model,以及完整的OJM数据绑定功能。
1、显而易见,无论是哪种形式的转换,Jackson > Gson > Json-lib。
Jackson的处理能力甚至高出Json-lib有10倍左右
2、JSON-lib似乎已经停止更新,最新的版本也是基于JDK15,而Jackson的社区则较为活跃;
3、在测试性能的同时,又以人肉方式对这三个类库转换的正确性 进行了检查 ,三者均达100%正确 ;
4、JSON-lib在转换诸如Date类型时较为累赘,如以下是两者的转换结果:
JSON-lib:
{"brithday":{"date":17,"day":2,"hours":9,"minutes":24,"month":7,"seconds":26,"time":1282008266398,"timezoneOffset":-480,"year":110}}
Jackson:
{"brithday":1282008123101}
5、JSON-lib依赖commons系列的包及 ezmorph包共 5个,而Jackson除自身的以外只依赖于commons-logging
6、Jackson提供完整基于节点的Tree Model,以及完整的OJM数据绑定功能。
?
现在有个树型结构的json数据,使用json-lib转换成对象,转换调试发现得到的对象有“失真”,后面对比,jackjson,fastjson,gson,结果发现只有json-lib转换出现问题。
?
下面是调试对比:
?
json格式数据:
?
{
"attr": {
"desc": "",
"id": 0,
"name": "一层",
"parentId": -1
},
"data": {
"icon": "",
"title": "一层标题"
},
"children": [
{
"attr": {
"desc": "",
"id": 1,
"name": "二层",
"parentId": 0
},
"data": {
"icon": "",
"title": "二层标题"
},
"children": [
{
"attr": {
"desc": "",
"id": 2,
"name": "三层",
"parentId": 1
},
"data": {
"icon": "",
"title": "三层标题"
},
"children": [
{
"attr": {
"desc": "",
"id": 3,
"name": "四层",
"parentId": 2
},
"data": {
"icon": "",
"title": "四层标题"
}
}
]
}
]
}
]
}
?
对应java对象如下:
?
public class NodeBean {
private AttributeBean attr;
private DataBean data;
private List<NodeBean> children;
}
public class AttributeBean {
private Long id;
private String name;
private Long parentId;
private String desc;
}
public class DataBean {
private String title;
private String icon;
}
?
测试代码:
//将树型json数据转换为对象
//jsonlib 2.4 转换
NodeBean jsonlibBean = (NodeBean) JSONObject.toBean(JSONObject.fromObject(responseStr), NodeBean.class);
//jackson 2.1.0 转换
ObjectMapper mapper = new ObjectMapper();
try {
NodeBean jacksonToBean = mapper.readValue(responseStr, NodeBean.class);
} catch (Exception e) {
e.printStackTrace();
}
//fastjson 1.1.28 转换
NodeBean fastJsonToBean = JSON.parseObject(responseStr, NodeBean.class);
//gson 2.2.2 转换树
Gson gson = new Gson();
NodeBean gsonToBean = gson.fromJson(responseStr, NodeBean.class);
?
json-lib调试:注意观察在children 默认会转成MorphDynaBean,MorphdynaClass,HashMap,MorpherRegistry

?
jackson调试:

?
fastjson调试:

?
g
