• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            JSON剖析:優(yōu)點和不足

            摘要

              XML——這種用于表示客戶端與服務器間數(shù)據(jù)交換有效負載的格式,幾乎已經(jīng)成了Web services的同義詞。然而,由于AjaxREST技術的出現(xiàn)影響了應用程序架構,這迫使人們開始尋求`XML的替代品,如:JavaScript Object NotationJSON)。

              JSON 作為一種更輕、更友好的 Web services客戶端的格式(多采用瀏覽器的形式或訪問 REST風格 Web服務的Ajax應用程序的形式)引起了 Web 服務供應商的注意。

              本文將闡述JSONWeb services設計中備受推崇的原因,以及它作為XML替代方案的主要優(yōu)勢和局限性。文中還會深入探討:隨著相應的Web 服務客戶端選擇使用JSON,如何才能便捷地在Java Web services中生成JSON輸出。

            XML的十字路口: 瀏覽器和 Ajax

              XML設計原理已經(jīng)發(fā)布了將近十年。時至今日,這種標記語言已經(jīng)在廣闊的軟件應用領域中占據(jù)了主導地位。從Java.NET等主流平臺中的配置和部署描述符到應用集成場景中更復雜的應用,XML與生俱來的語言無關性使之在軟件架構師心目中占據(jù)著獨特的地位。但即便最著名的XML權威也不得不承認:在某些環(huán)境中,XML的使用已經(jīng)超出了它自身能力的極限。

              圍繞Ajax原理構建的那些Web應用程序最能說明XML的生存能力,從這一點來看,一種新的有效負載格式的發(fā)展壯大也得益于XML。這種新的有效負載格式就是JavaScript Object Notation (JSON)。在探索這種新的標記語言的復雜性之前,首先來分析一下在這種獨特的設計形式中,XML具有哪些局限性。

              Ajax建立了一個用于從遠程Web services發(fā)送和接收數(shù)據(jù)的獨立信道,從而允許Web程序執(zhí)行信道外(out-of-band)客戶端/服務器調用。通俗地說,Ajax程序中的更新和導航序列在典型的客戶端/服務器環(huán)境之外完成,在后臺(即信道外)接受到信息后,必須進行一次完整的屏幕刷新。更多背景信息,請參閱David Teare Ajax簡介(Dev2Dev)。

              這些應用程序更新通常是通過REST風格(RESTfulWeb services獲得的,一旦被用戶的瀏覽器接收到,就需要整合到HTML頁面的總體布局之中,這正是XML發(fā)揮強大力量的場合。盡管近年來,腳本語言支持和插件支持已使大多數(shù)主流瀏覽器的功能得到了強化,但許多編程任務依然難于開展,其中之一就是操縱或處理文本,這通常是使用DOM實現(xiàn)的。

              采用DOM的復雜性源于其基于函數(shù)的根,這使得對數(shù)據(jù)樹的簡單修改或訪問都需要進行無數(shù)次方法調用。此外,眾所周知,DOM在各種瀏覽器中的實現(xiàn)細節(jié)不盡相同,這一過程將帶來極為復雜的編程模式,其跨瀏覽器兼容性出現(xiàn)問題的可能性極大。接下來的問題顯而易見,那就是:如何使一種標記語言輕松集成到HTML頁面中以滿足Ajax的要求?

              問題的答案就是:利用所有主流瀏覽器中的一種通用組件——JavaScript引擎。XML需要使用DOM之類的機制來訪問數(shù)據(jù)并將數(shù)據(jù)整合到布局之中,采用這種方法,我們不再使用像XML這樣的格式來交付Ajax更新,而是采用一種更為簡單直觀的方式,采用JavaScript引擎自然匹配的格式——也就是JSON

              既然已經(jīng)明確了JSONXMLAjax之間的關系,下面將進一步探討JSON背后的技術細節(jié)。

            JSON剖析:優(yōu)點和不足

              對于JSON,首先要明白JSONXML一樣也是一種簡單文本格式。相對于XML,它更加易讀、更便于肉眼檢查。在語法的層面上,JSON與其他格式的區(qū)別是在于分隔數(shù)據(jù)的字符,JSON中的分隔符限于單引號、小括號、中括號、大括號、冒號和逗號。下圖是一個JSON有效負載:

            {"addressbook": {"name": "Mary Lebow",

                "address": {

                    "street": "5 Main Street"

                    "city": "San Diego, CA",

                    "zip": 91912,

                },

                "phoneNumbers": [

                    "619 332-3452",

                    "664 223-4667"

                ]

             }

            }

              將上面的JSON有效負載用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>

              是不是很相似?但它們并不相同。下面將詳細闡述采用JSON句法的優(yōu)點和不足。

            優(yōu)點

              乍看上去,使用JSON的數(shù)據(jù)分隔符的優(yōu)點可能并不那么明顯,但存在一個根本性的緣由:它們簡化了數(shù)據(jù)訪問。使用這些數(shù)據(jù)分隔符時, JavaScript引擎對數(shù)據(jù)結構(如字符串、數(shù)組、對象)的內(nèi)部表示恰好與這些符號相同。

              這將開創(chuàng)一條比DOM技術更為便捷的數(shù)據(jù)訪問途徑。下面列舉幾個JavaScript代碼片段來說明這一過程,這些代碼片段會訪問先前的JSON代碼片段中的信息:

               訪問JSON中的名稱: addressbook.name

               訪問JSON中的地址: addressbook.address.street

               訪問JSON中的電話號碼第一位:addressbook.address.phoneNumbers[0]

              如果您具備DOM編程經(jīng)驗,就能很快地看出區(qū)別;新手可以參看 Document Object Model 的這一外部資源,這里提供了關于數(shù)據(jù)導航的實例。

              JSON的另一個優(yōu)點是它的非冗長性。在XML中,打開和關閉標記是必需的,這樣才能滿足標記的依從性;而在JSON中,所有這些要求只需通過一個簡單的括號即可滿足。在包含有數(shù)以百計字段的數(shù)據(jù)交換中,傳統(tǒng)的XML標記將會延長數(shù)據(jù)交換時間。目前還沒有正式的研究表明JSONXML有更高的線上傳輸效率;人們只是通過簡單的字節(jié)數(shù)比較發(fā)現(xiàn),對于等效的JSONXML有效負載,前者總是小于后者。至于它們之間的差距有多大,特別是在新的XML壓縮格式下它們的差距有多大,有待進一步的研究。

              此外,JSON受到了擅長不同編程語言的開發(fā)人員的青睞。這是因為無論在Haskell中或 Lisp中,還是在更為主流的C#PHP中,開發(fā)都可以方便地生成JSON(詳見 參考資料)。

            不足

              和許多好東西都具有兩面性一樣,JSON的非冗長性也不例外,為此JSON丟失了XML具有的一些特性。命名空間允許不同上下文中的相同的信息段彼此混合,然而,顯然在JSON中已經(jīng)找不到了命名空間。JSONXML的另一個差別是屬性的差異,由于JSON采用冒號賦值,這將導致當XML轉化為JSON時,在標識符(XML CDATA)與實際屬性值之間很難區(qū)分誰應該被當作文本考慮。

              另外,JSON片段的創(chuàng)建和驗證過程比一般的XML稍顯復雜。從這一點來看,XML在開發(fā)工具方面領先于JSON。盡管如此,為了消除您對這一領域可能存在的困惑,下節(jié)將介紹一些最為成熟的JSON開發(fā)

             

            posted on 2009-07-28 11:48 肥仔 閱讀(1146) 評論(0)  編輯 收藏 引用 所屬分類: Web-前臺

            久久最新精品国产| 久久99热只有频精品8| 久久996热精品xxxx| 亚洲精品无码专区久久同性男| 久久伊人五月天论坛| 久久久久久精品成人免费图片| 97精品依人久久久大香线蕉97| 伊人久久精品线影院| 色妞色综合久久夜夜| 久久久久久久尹人综合网亚洲| 色欲综合久久躁天天躁| 久久久久无码精品国产不卡| 久久精品国产国产精品四凭| 久久国产精品无码HDAV| 久久只有这里有精品4| 亚洲精品高清久久| 久久精品亚洲一区二区三区浴池 | 久久久久国产一级毛片高清板 | 久久国产精品99国产精| 久久精品夜色噜噜亚洲A∨| 精品永久久福利一区二区| 一本久久综合亚洲鲁鲁五月天| 青青草国产精品久久久久| 色8久久人人97超碰香蕉987| 一极黄色视频久久网站| 久久久91人妻无码精品蜜桃HD| 99久久精品国产免看国产一区| 久久亚洲精品无码VA大香大香| 久久九九免费高清视频| 99久久国产综合精品网成人影院| 久久久精品国产sm调教网站 | 人妻精品久久无码区| 麻豆av久久av盛宴av| 久久播电影网| 性做久久久久久久久久久| 成人午夜精品久久久久久久小说| 久久精品国产亚洲AV香蕉| 久久精品国产99久久无毒不卡| 蜜臀av性久久久久蜜臀aⅴ| 久久久国产乱子伦精品作者| 日韩av无码久久精品免费|