XML的十字路口: 瀏覽器和 Ajax XML設計原理已經發布了將近十年。時至今日,這種標記語言已經在廣闊的軟件應用領域中占據了主導地位。從java、.NET等主流平臺中的配置和部署描述符到應用集成場景中更復雜的應用,XML與生俱來的語言無關性使之在軟件架構師心目中占據著獨特的地位。但即便最著名的XML權威也不得不承認:在某些環境中,XML的使用已經超出了它自身能力的極限。 圍繞Ajax原理構建的那些Web應用程序最能說明XML的生存能力,從這一點來看,一種新的有效負載格式的發展壯大也得益于XML。這種新的有效負載格式就是JavaScript Object Notation (JSON)。在探索這種新的標記語言的復雜性之前,首先來分析一下在這種獨特的設計形式中,XML具有哪些局限性。 Ajax建立了一個用于從遠程Web services發送和接收數據的獨立信道,從而允許Web程序執行信道外(out-of-band)客戶端/服務器調用。通俗地說,Ajax程序中的更新和導航序列在典型的客戶端/服務器環境之外完成,在后臺(即信道外)接受到信息后,必須進行一次完整的屏幕刷新。更多背景信息,請參閱David Teare的 Ajax簡介(Dev2Dev)。 這些應用程序更新通常是通過REST風格(RESTful)Web services獲得的,一旦被用戶的瀏覽器接收到,就需要整合到HTML頁面的總體布局之中,這正是XML發揮強大力量的場合。盡管近年來,腳本語言支持和插件支持已使大多數主流瀏覽器的功能得到了強化,但許多編程任務依然難于開展,其中之一就是操縱或處理文本,這通常是使用DOM實現的。 采用DOM的復雜性源于其基于函數的根,這使得對數據樹的簡單修改或訪問都需要進行無數次方法調用。此外,眾所周知,DOM在各種瀏覽器中的實現細節不盡相同,這一過程將帶來極為復雜的編程模式,其跨瀏覽器兼容性出現問題的可能性極大。接下來的問題顯而易見,那就是:如何使一種標記語言輕松集成到HTML頁面中以滿足Ajax的要求? 問題的答案就是:利用所有主流瀏覽器中的一種通用組件——Javascript引擎。XML需要使用DOM之類的機制來訪問數據并將數據整合到布局之中,采用這種方法,我們不再使用像XML這樣的格式來交付Ajax更新,而是采用一種更為簡單直觀的方式,采用JavaScript引擎自然匹配的格式——也就是JSON。 既然已經明確了JSON與XML和Ajax之間的關系,下面將進一步探討JSON背后的技術細節。 JSON剖析:優點和不足 對于JSON,首先要明白JSON和XML一樣也是一種簡單文本格式。相對于XML,它更加易讀、更便于肉眼檢查。在語法的層面上,JSON與其他格式的區別是在于分隔數據的字符,JSON中的分隔符限于單引號、小括號、中括號、大括號、冒號和逗號。下圖是一個JSON有效負載:
Java代碼
{"addressbook": {"name": "Mary Lebow", "address": { "street": "5 Main Street" "city": "San Diego, CA", "zip": 91912, }, "phoneNumbers": [ "619 332-3452", "664 223-4667" ] } } [java] view plain copy{"addressbook": {"name": "Mary Lebow", "address": { "street": "5 Main Street" "city": "San Diego, CA", "zip": 91912, }, "phoneNumbers": [ "619 332-3452", "664 223-4667" ] } } 將上面的JSON有效負載用XML改寫,如下:
Xml代碼
<addressbook> <name>Mary Lebow</name> <address> <street>5 Main Street</street> <city zip="91912"> San Diego, CA </city> <phoneNumbers> <phone>619 332-3452</phone> <phone>664 223-4667</phone> </phoneNumbers> </address> </addressbook> [xml] view plain copy<addressbook> <name>Mary Lebow</name> <address> <street>5 Main Street</street> <city zip="91912"> San Diego, CA </city> <phoneNumbers> <phone>619 332-3452</phone> <phone>664 223-4667</phone> </phoneNumbers> </address> </addressbook> 是不是很相似?但它們并不相同。下面將詳細闡述采用JSON句法的優點和不足。
優點:1. 數據格式比較簡單, 易于讀寫, 格式都是壓縮的, 占用帶寬小2. 易于解析這種語言, 客戶端JavaScript可以簡單的通過eval_r()進行JSON數據的讀取3. 支持多種語言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, php, Python, Ruby等語言服務器端語言, 便于服務器端的解析4. 在PHP世界, 已經有PHP-JSON和JSON-PHP出現了, 便于PHP序列化后的程序直接調用. PHP服務器端的對象、數組等能夠直接生JSON格式, 便于客戶端的訪問提取.5. 因為JSON格式能夠直接為服務器端代碼使用, 大大簡化了服務器端和客戶端的代碼開發量, 但是完成的任務不變, 且易于維護缺點:1. 沒有XML格式這么推廣的深入人心和使用廣泛, 沒有XML那么通用性2. JSON格式目前在Web Service中推廣還屬于初級階段JSON 和 XML 優缺點的比較1. 在可讀性方面,JSON和XML的數據可讀性基本相同。JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規范的標簽形式,很難分出勝負。2. 在可擴展性方面,XML天生有很好的擴展性,JSON當然也有,沒有什么是XML能擴展,JSON不能的。3. 在編碼難度方面,XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的代碼,可是要寫好XML就不太容易了。4. 在解碼難度方面,XML的解析得考慮子節點父節點,讓人頭昏眼花,而JSON的解析難度幾乎為0。這一點XML輸的真是沒話說。5. 在流行度方面,XML已經被業界廣泛的使用,而JSON才剛剛開始,但是在Ajax這個特定的領域,未來的發展一定是XML讓位于JSON。到時Ajax應該變成Ajaj(Asynchronous Javascript and JSON)了。6. JSON和XML同樣擁有豐富的解析手段。7. JSON相對于XML來講,數據的體積小。8. JSON與JavaScript的交互更加方便。9. JSON對數據的描述性比XML較差。10. JSON的速度要遠遠快于XML。
新聞熱點
疑難解答