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來轉換。