Java JSON技术框架选型与实例
?
JSONJSON英文全称为JavaScript Object Natation
Java transient关键字?? JAVA规范原文The transient marker is not fully specified by the Java Language Specification but is used in object serialization to mark member variables that should not be serialized.
基于JAVA的JSON主要开源项目及其对比JSON转Bean,5个线程并发,约200字节对象,1千万次转换:
?
Jackson
JSON-lib
Gson
吞吐量
64113.7
8067.4
13952.8
总耗时(秒)
155
1238
700
?Bean转JSON,5个线程并发,约200字节对象,1千万次转换:
?
Jackson
JSON-lib
Gson
吞吐量
54802
15093.2
17308.2
总耗时(秒)
181
661
560
显而易见,无论是哪种形式的转换,Jackson > Gson > Json-lib。
?????Jackson的处理能力甚至高出Json-lib有10倍左右
?
性能对比
测试案例
JSON-Lib
Simple-JSON
Fastjson
Jackson
IntArray1000Decode
3,626
1,431
563
596
StringArray1000Decode
2,698
2,283
677
774
Map100StringDecode
515
597
208
230
功能对比
特性
JSON-Lib
Simple-JSON
Fastjson
Jackson
序列化支持数组
不支持
不支持
支持
支持
序列化支持Enum
不支持
不支持
支持
支持
支持JavaBean
不直接支持
不直接支持
支持
支持
?
可以看到Fastjson在性能方面,超越目前的所有java json proccesor,包括jackson。
?
FastJson应用实例//定义一个User PO对象
public class User implements Serializable { private static final long serialVersionUID = 1738399846398814044L; private String userid; private String username; //注意这里使用了Refrence及Lazyloading相关的引用 @Refrence private UserDetail userDeatil; public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this. username = username; } public UserDetail getUserDetail() { return userDetail; } public void setUserDetail (UserDetail userDetail) { this. userDetail = userDetail; } } ?
?
//定义一个UserDetail PO对象
public class UserDetail implements Serializable { private static final long serialVersionUID = 1738399846398814045L; private String address; public String getAddress() { return address; } public void setAddress (String address) { this. address = address; } } ?
?
这里使用伪码
…. List<User> ls= userService.getUserList(); PrintWriter out = null; try { out = getResponse().getWriter(); out.write(JSON.toJSONString(ls)); out.flush(); } catch (IOException e) { e.printStackTrace(); } finally { out.close(); } … ??
$.ajax({ type:"GET", url:"/user/getuserlist", //假设这是你配置后的action地址 dataType:"json", cache:false, success: function(users){ var html=””; if(users.length>0){ for(var i in users){ html=html+”username:”+users[i]+username+” address:”+users[i].userDetail.address; } alert(html); } }); ?
?
第一种办法:
private transient UserDetail userDeatil; ?
第二种办法:
@JSONField(serialize=false) private transient UserDetail userDeatil; ?
?