一、引言
隨著3G時代的到來,為了讓手機用戶能夠在任何時候,任何地方,以任何形式查詢手機校園助手所提供的服務,一種高效的辦法就是將應用系統的功能拓展到手機終端,在手機上通過移動網和互聯網訪問Web 網站并處理各項業務。從用戶需求的角度來講,將手機校園助手提供的服務通過現代的先進技術拓展到手機終端是一項具有極大潛在的用戶需求,而基于Android 平臺的手機應用已成為必然的發展趨勢,它是一個開放的手機平臺,從發布到推廣,在短短的時間內以驚人的速度占據大量的智能手機市場,而且將繼續擴大其用戶量。通過對Android 提供的API 訪問Web 服務器進行數據傳輸的研究,認為Android 提供的技術在框架上有很大的優勢,但是Android 最常用的方式就是以XML 格式的文件作為信息交換的媒介,這使其存在許多不足。首先,XML 格式文件存儲了大量的冗余信息,相對于JSON 格式的文件需要占用更多的帶寬。其次,XML 的數據表示過于正規和繁瑣,對移動和嵌入式應用程序尤其如此,這使其對XML 格式的文件進行解析相比JSON 格式的文件更復雜。因此,在具體提取數據和傳輸數據的細節上還需要增加新的技術來彌補,而JSON 是一種輕量級的數據傳輸格式,允許輕松地將JavaScript 對象轉換成可以隨請求發送的數據,在保障安全性的同時,解決了XML的缺陷。
二、基于JSON 的數據傳輸技術
隨著智能手機的普遍使用,使用移動終端訪問瀏覽器的需求量越來越大,人們獲取信息的途徑也越來越多,Servlet 技術由于具有可移植性,穩健性和易開發性而被廣泛應用,它的主要功能在于交互式地瀏覽和修改數據生成動態Web 內容,其過程為:客戶端發送請求至服務器端— → 服務器將請求信息發送至Servlet — → Servlet 生成響應內容并將其傳給Server — → 服務器將響應返回給客戶端。以實際項目中Android 客戶端向學校教務系統的Web 服務器發送HTTP 的GET 和POST請求為例來進行說明,其系統框架設計如圖1 。
圖1 基于JSON的系統框架設計
在發送HTTP 請求的過程中,使用JSON 作為數據傳輸的過程如下:
HttpPost request = new HttpPost(url) ;
//封裝一個JSON 對象
JSONObject param = new JSONObject() ;
param .put("username","20091213701") ;
param .put("password","12345") ;
......
//綁定到請求Entry
StringEntity stren = new
StringEntity(param.toString()) ;
request.setEntity(stren) ;
//發送請求
HttpResponse httpResponse = new
DefaultHttpClient().execute(request) ;
//得到應答的字符串,數據使用JSON 格式保存
String retSrc = EntityUtils.toString(httpResponse.getEntity()) ;
//生成JSON 對象
JSONObject result = new JSONObject(retSrc) ;
String token = result .get("token") ;
......
當網頁由于頻繁訪問而使流量的消耗過大時,和XML 的數據傳輸格式相比,JSON 作為一種更輕、更友好的Web Services 客戶端的格式,大大增強了用戶體驗。它不僅易于閱讀和編寫,同時也易于機器解析和生成,其工作原理如下:當學生通過手機客戶端使用HTTP 協議發送已序列化的JSON 消息到服務器端,服務器端通過反序列化JSON 消息,根據客戶端請求進行相應的操作后,把請求的結果序列化成JSON 消息返回給客戶端,客戶端獲取到返回的JSON 消息后,反序列化成具體需要的數據,從而大大提高了數據傳輸效率,節省了時間。
三、基于JSON 和XML 格式數據傳輸對比的實際應用
(一)JSON 和XML 數據傳輸時間對比
JSON 相對于XML 來講,數據的體積小,速度遠遠快于XML 。JSON 占用帶寬小,瀏覽器解析速度快,數據格式較簡單,都是壓縮的,而XML 文件格式文件龐大,格式復雜,傳輸占用帶寬大,服務器端和客戶端都需要花費大量代碼來解析XML 。為了更好地比較JSON 和XML 的傳輸效率,我們通過使用JSON 和XML 兩種數據傳輸格式對同一個數據庫文件的學生信息進行數據傳輸并記錄傳輸時間。其中:
1.JSON 的數據傳輸格式如下:
"student" :[
{"name" :"zhangsan" ,
"no" :"20091213" ,
"class" :"rj091" ,
"sex" :"male" ,
"age" :"21" ,
"prof" :"rjgc"} ,
{"name" :"lisi" ,
"no" :"20091214" ,
"class" :"rj093" ,
"sex" :"female" ,
"age" :"20" ,
"prof" :"rjgc"} ,
{"name" :"wangwu" ,
"no" :"20091215" ,
"class" :"w1091" ,
"sex" :"male" ,
"age" :"22" ,
"prof" :"wlgc"} ,
......]
2.XML 的數據傳輸格式如下:
< ? xml version= "1.0"encoding = "UTF-8"? >
< statuses type = "array" >
< status >
< time > 2009 < /time>
< no > 15221439 < /no >
< name> fableson < /name >
< sex > female< /sex >
< age > 22 < /age >
< /status >
<status >
< time > 2010 < /time>
< no > 15221438 < /no >
< name > jonk </name >
< sex > male< /sex >
< age > 20 </age >
< /status >
......
< /statuses >
3.解析結果如圖(2)圖(3)所示
圖2 JSON 解析結果
圖3 XML 解析結果
由于網絡不穩定因素,實驗數據存在一定的波動,統計結果如表1 :
表1 JSON 和XML 數據傳輸時間對比
實驗數據表明,對于輕量級的數據,JSON 的傳輸效率明顯高于XML 。這是因為在Android 開發框架中,數據持久層都是使用面向對象的對象關系映射框架開發的,使開發著必須完全遵守面向對象的開發方法,但采用以XML 格式文件作為信息交換媒介,需要將數據持久層查詢的對象映射為XML 文件,然后傳送給Android 客戶端,再由Android 客戶端進行解析并封裝成對象,或者與上述對象相反的過程。而JSON 是利用JSON 對象將其直接轉化為腳本,大大提高了其傳輸效率,提高了用戶體驗。
(二)JSON 和XML 數據傳輸安全性對比
1.JavaScript 的Eval()函數
在保障數據傳輸效率的同時,安全性的保障也是我們目前面臨的重要問題,而JSON 本來是JavaScript 的一個安全的子集,不含有賦值和調用。因此在將JSON 數據轉換成為JavaScript 對象的時候,我們包括許多JavaScript 庫都使用Eval 函數。這意味著獲取的JSON 數據將被解析并執行,尤其是當有些數據是來自用戶輸入的時候,可能會帶來意想不到的安全性問題。攻擊者可以利用這點發送畸形、惡意的JSON 數據,這樣Evial 函數就會執行這些惡意代碼。
如發送以下學生信息代碼:
Window.location = "< a
href = " http ://badsite.com" > http ://badsite.com </a> ?" +document.cookie ;
student :{
"no" :"20091213" ,
"name" :"aaa" ,
"math" :"86"
"english" :"90"
....
}
上面的代碼會導致瀏覽器把用戶的Cookie 數據提交到一個流氓網站,其中一種防止不安全代碼出現的解決辦法,是通過瀏覽器原生支持的JSON.parse(str)方法讀取JSON 數據,目前已經得到大部分主流瀏覽器的支持(IE8 +,Firefox 3.5+,Chrome4 +/Safari4 +,Opera10 +),而在不支持原生JSON 對象的瀏覽器上面可以使用parseJSON方法進行讀取,parseJSON 采用解析器驗證讀入的代碼是否真的是JSON 代碼,這樣就提供了較好的安全性,但由于這是用模擬的方式讀取,速度上會比Eval()慢。因此,在使用JSON 作為數據交換格式的時候,我們可以使用正則表達式來檢查JSON 數據是否包含有惡意代碼關鍵字,以此來保障JSON 的安全性。
2.跨站訪問問題
JSON 數據傳輸的另外一個安全性問題則是跨站請求偽造(Cross-site request forgery ,簡稱CSRF 或XSRF) ,增加了用戶數據傳輸的安全性隱患。對于這個問題,由于JavaScript 采用了稱為“沙盒”的機制,這種機制限制JavaScript 引擎僅能引入同一個站點的代碼,因而某種程度上提高了JSON 的安全性,確保用戶數據安全傳輸而不會使數據泄漏。
四、JSON 與XML 對比
(一)可讀性
JSON 和XML 的可讀性可謂不相上下,一邊是簡易的語法,一邊是規范的標簽形式,很難分出勝負。XML 和JSON 都是使用結構化方法來標記數據的,而JSON 也提供了一種具有嵌套數據元素的結構,就像XML 一樣。與XML 相同,JSON 也是基于文本的,且它們都使用Unicode 編碼,且其與XML 一樣具有可讀性。
(二)可擴展性
XML 天生有很好的擴展性,JSON 當然也有,沒有什么是XML 能擴展,JSON 不能的,不過JSON可以存儲復合對象,有著XML 不可比擬的優勢。從主觀上來看,JSON 更為清晰且冗余更少,而且JSON 網站提供了對JSON 語法的嚴格描述,只是描述較簡短。從總體來看,XML 比較適合于標記文檔,而JSON 卻更適于進行數據交換處理,一個JSON 文檔的每一個實例都負責描述一個對象,其具體的描述是通過使用嵌套的對象,數組,字符串,數字,布爾值或null 值來實現的。
(三)數據交換格式的分析
XML 是一種用于描述信息存儲格式的語言,其優點是健壯性和描述性強,而且是新一代開放\可互操作的Web Service 選用的通信數據格式。在移動應用程序中,開放者通常自己創建數據交換格式或可擴展標記語言XML 。前者的優勢是可針對特殊定情況進行調整,從而最大限度的提高性能,并最大限度的利用計算機資源。當在HTTP 上使用后者時,其優勢在于它是事實上的數據交換標準。另外,在XML 中使用的基于文本的表示形式使其易于調試。這兩種放放風各有其缺陷,前者本質是專用的\非標準的,并可能是不可互操作的,而后者數據表示過于正規和繁瑣,對于移動和嵌入式應用程序,JSON 是一種輕量級的數據交換格式,是基于文本的,具有良好的可讀性且易于調試,JSON 支持所有基本數據類型的表示法,并提供將這些數據類型相互解析為Java 類型的方法,對于輕量級應用,JSON 數據交換格式能夠較好的節省手機的計算資源,減少網絡傳輸時間,加快網絡傳輸速度。
(四)編碼難度
XML 有豐富的編碼工具,比如Dom4j 、JDOM等,JSON 也有json .org 提供的工具。但是JSON 的編碼難度相對XML 容易許多,即使不借助工具也能寫出JSON 的代碼,可是要寫好XML 就比較復雜,JSON 可以將JavaScript 對象中表示的一組數據轉換為字符串,然后就可以在函數之間輕松地傳遞這個字符串,或者在異步應用程序中將字符串從Web 客戶機傳遞給服務器端程序。
(五)解碼難度
XML 的解析要考慮子節點和父節點,相對來說較復雜,而JSON 的解析難度幾乎為零,這一點是XML 無法比擬的。JSON 和XML 同樣擁有豐富的解析手段,XML 解析方式有兩種:一是通過文檔模型解析,也就是通過父標簽索引出一組標記,但這樣必須在預先知道文檔結構的情況下使用,無法進行通用的封裝。另外一種方法是遍歷節點,這個可以通過遞歸來實現,不過解析出來的數據仍舊是形式各異,往往也不能滿足預先的要求。
凡是這樣可擴展的結構數據解析起來一定都很困難,JSON 也同樣如此,但如果預先知道JSON 結構的情況下,使用JSON 進行數據傳遞就更加方便快捷,可以寫出很實用美觀可讀性強的代碼。
(六)交互性
JSON 和JavaScript 的交互更加方便,客戶端JavaScript 可以簡單的通過evil()進行JSON 數據的讀取,但JSON 對數據的描述性和XML 相比較差。
(七)流行度
XML 已經被業界廣泛的使用,而JSON 才剛剛開始,只是在Ajax 這個特定的領域。在普通的Web應用領域,開發者經常為XML 的解析傷腦筋,無論是服務器端生成處理XML,還是客戶端用JavaScript 解析XML ,都常常導致復雜的代碼,極低的開發效率。
實際上,對于大多數Web 應用來說,它們根本不需要復雜的XML 來傳輸數據,XML 宣稱的擴展性在此就很少具有優勢;許多Ajax 應用甚至直接返回HTML 片段來構建動態Web 頁面。和返回XML 并解析它相比,返回HTML 片段大大降低了系統的復雜性,但同時缺少了一定的靈活性。同XML 或HTML 片段相比,數據交換格式JSON提供了更好的簡單性和靈活性。
五、結束語
通過手機移動終端來訪問Web 服務器已成為眾多用戶的選擇,學生通過手機隨時隨地訪問教務系統,在手機上和同學們進行學習交流等已成為廣大高校學生的需求,但從另一方面來講,流量的大量消耗也成為了學生們的負擔。而JSON是一種輕量級的數據交換格式,能夠生成更小的文檔,且其在JavaScript 腳本中更易于使用。其基本思想是,把自己實現為JavaScript 開發中XML數據操作的主要替代者,利用其簡單的數據格式,較小帶寬的占用,代碼開發量小,兼容性強,解析速度快,開發效率高,靈敏度高等優點有效地解決了XML 所造成的缺陷,大大減小了移動瀏覽時的網絡流量,在確保數據安全傳輸的同時大大提高了數據傳輸效率,體現了其優越性。
核心關注:拓步ERP系統平臺是覆蓋了眾多的業務領域、行業應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業務領域的管理,全面涵蓋了企業關注ERP管理系統的核心領域,是眾多中小企業信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網http://www.guhuozai8.cn/
本文網址:http://www.guhuozai8.cn/html/consultation/10839712255.html