XStream是thoughtworks开发的开源产品,采用的是xpp来进行xml和对象之间的转换。它不需要schema或其他的mapping文件就可以进行java对象和xml文件之间的转换,API调用起来非常方便,并且扩展功能强大。
网址:http://xstream.codehaus.org
JSON是目前比较流行的轻量级的对象数据转换方式,常常用在ajax和web service领域。目前大部分语言都有JSON的实现。Java领域有json lib,还有xstream json(jettison)。
网址:http://json-lib.sourceforge.net/
http://jettison.codehaus.org
主要是对3者 (xstream, json lib, xstream json) 转换的数据长度,还有转换的效率做个比较。
转换的java类为:
























数据格式和长度比较:
方法 |
长度 |
格式 |
Xstream |
328 |
<com.ldd600.ws.Employee> <name>gavin</name> <age>0</age> <address> <street>zhaojiabang</street> <country>china</country> <city>shanghai</city> <doorNum>789</doorNum> <empName>gavin</empName> </address> <salary>300000.0</salary> <isActive>true</isActive> <sexy>m</sexy> </com.ldd600.ws.Employee> |
Json lib |
170 |
"789","empName":"gavin","street":"zhaojiabang"},"age":0,"name":"gavin","salary":300000,"sexy":"m"} |
XStream json |
183 |
{"employee":{"name":"gavin","age":0,"address":{"street":"zhaojiabang","country":"china","city":"shanghai","doorNum":789,"empName":"gavin"},"salary":300000,"isActive":true,"sexy":"m"}} |
时间(转换次数1000000):
方式 |
时间(ms) |
Json lib |
185638 |
XStream xml |
247863 |
XStream json |
395624 |
Xstream xml方式比json lib慢:62s
Xstream json方式比xstream xml慢:147s
如何选择:
JSON:
只是纯粹数据转换的方式,如果不需要命名空间,验证,XSLT等xml的功能,可以考虑使用。但是JSON规范还存在一些不支持的情况,比如当Address类中也有Employee类的引用时,转换就会抛出异常。要说明的是jettison应该是xml和json之间转换的工具,xstream利用jettison完成java对象到xml再到json的转换,这样性能就更糟糕了。而且xstream json有很多不满足json规范的地方,比如一个空string在json规范中会转成null,而在xstream json中会转换成””, 所以在使用其他json工具消费xstream json生产的json字符串时就会出现问题。但Json lib提供了JSonConfig类解决了这个问题。如果进行xml和json之间的转换可以考虑使用jettison。
XStream:
采用xml作为数据转换的方式,这就是xml和json之争了。可以参考以下资源:
JSON vs. XML: The Debate
http://ajaxian.com/archives/json-vs-xml-the-debate
JSON Web Services - the XML JSON debate further ahead
http://techtracer.com/2007/04/01/json-web-services-the-xml-json-debate-further-ahead/
JSON Pros and Cons
http://myarch.com/json-pros-and-cons
Debate: JSON vs. XML as a data interchange format
http://www.infoq.com/news/2006/12/json-vs-xml-debate
Xstream不需要关心xml schema验证,它比json好的一个地方是它可以自动处理引用的表达方式,比如多个变量重复引用同一个对象,循环引用等,如;
<employee reference="../.."/>。
它的API使用太方便了,
XStream xstream = new XStream();
String xml = xstream.toXML(employee);
Employee xsEmployee = (Employee) xstream.fromXML(xml);
Xstream自定义和扩展功能也很强大,如用户可以通过converter来实现自己类型的转换逻辑。
现在我们有个项目需要设计一个通用的web service agent,根据客户端提供的类名,方法名,参数等调用本地的方法。这样可能需要一种统一的数据格式和处理方式,考虑传的参数可能出现互相引用的情况,还有可读性,将来的扩展性等问题决定默认方式还是使用xstream来转换。
|
|