天天看點

[Network] HTML、XML和JSON學習彙總

  寫在前面:樓主也是剛剛接觸這方面的知識,之前完全是零基礎,後來經朋友推薦了幾個不錯的博文,看完以後豁然開朗。但是此博文更加偏重于基礎知識介紹(其實更深的樓主也還不了解,這方面的大神請繞道),隻是分享個人的一個學習總結。希望那些跟我一樣,在實驗室悶頭搞科研,一出門實習完全一頭霧水的同僚們可以借鑒:好多東西并沒有我們想想的那麼複雜,隻要你肯學,邁出第一步,你就成功了一大半。與大家共勉!

  好了,想花時間接着往下看的博友們,我們可以步入正題了。

1. HTML語言

  首先,先簡單的提及一下超文本标記語言HTML(HyperText Markup Language)。對于HTML語言,大家一定不陌生,沒吃過豬肉,可總見過豬跑吧。

  簡單來說,超文本标記語言HTML是為“網頁建立和其它可在網頁浏覽器中看到的資訊”設計的一種标記語言。“超文本”就是指頁面内可以包含圖檔、連結,甚至音樂、程式等非文字元素。“标記”是指計算機所能了解的資訊符号,通過此種标記,計算機之間可以處理包含各種資訊的文章等。有關HTML的具體細節就不具體介紹了,隻要記住以下三點就可以了:

  • 網頁的本質就是超級文本标記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、元件等),可以創造出功能強大的網頁。因而,超級文本标記語言是網際網路(Web)程式設計的基礎,也就是說網際網路是建立在超文本基礎之上的。網際網路盛行的原因,很大程度上都要歸功于HTML。
  • 超文本标記語言的結構包括“頭”部分(Head)、和“主體”部分(Body),其中“頭”部提供關于網頁的資訊,“主體”部分提供網頁的具體内容。
  • HTML被設計的目的是用來實作資料。

2. XML語言

  擴充标記語言 XML(Extensible Markup Language) 的規範定義:用于标記電子檔案使其具有結構性的标記語言,可以用來标記資料、定義資料類型,是一種允許使用者對自己的标記語言進行定義的源語言。 XML使用DTD(document type definition)文檔類型定義來組織資料;格式統一,跨平台和語言,早已成為業界公認的标準。XML是标準通用标記語言 (SGML) 的子集,非常适合 Web 傳輸。XML 提供統一的方法來描述和交換獨立于應用程式或供應商的結構化資料。

  簡單說,XML就是一種資料的描述語言,雖然它是語言,但是通常情況下,它并不具備常見語言的基本功能——被計算機識别并運作。隻有依靠另一種語言,來解釋它,使它達到你想要的效果或被計算機所接受。XML是獨立于軟體和硬體的資訊傳輸工具。 目前,XML在Web中起到的作用不會亞于一直作為 Web 基石的 HTML,XML無所不在。XML是各種應用程式之間進行資料傳輸的最常用的工具,并且在資訊存儲和描述領域變得越來越流行。

2.1 XML的特點

  關于XML,記住以下幾點就行了:

  • XML是一種标記語言,很類似HTML
  • XML的設計宗旨是傳輸資料,而非顯示資料
  • XML标簽沒有被預定義。您需要自行定義标簽。
  • XML被設計為具有自我描述性。
  • XML是W3C的推薦标準

2.2 XML與HTML的主要差異:

  • XML不是HTML的替代。
  • XML和HTML為不同的目的而設計:XML被設計為傳輸和存儲資料,其焦點是資料的内容;HTML被設計用來顯示資料,其焦點是資料的外觀。
  • HTML旨在顯示資訊,而 XML 旨在傳輸資訊。
  • XML是一種重量級的資料交換格式語言(詳細的解釋會在JSON的介紹中提及)。

  誤區:XML不是用來取代HTML的,它是HTML的補充。

2.3 XML允許自定義标簽

  XML被設計用來結構化、存儲以及傳輸資訊,它沒有預定義的标簽。在HTML中使用的标簽(以及HTML的結構)是預定義的。HTML文檔隻使用在HTML标準中定義過的标簽(比如

<p>

<h1>

 等等)。XML允許創作者定義自己的标簽和自己的文檔結構。

  舉個簡單的例子,比如John寫給George的便簽,存儲為XML:

<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>      

  上面的這條便簽具有自我描述性。它擁有标題以及留言,同時包含了發送者和接受者的資訊。但是,這個 XML 文檔仍然沒有做任何事情。它僅僅是包裝在XML标簽中的純粹的資訊。我們需要編寫軟體或者程式,才能傳送、接收和顯示出這個文檔。

2.4 XML的解析

  XML目前設計了兩種解析方式:DOM和 SAX。  

  1)DOM:把一個資料交換格式XML看成一個DOM對象,需要把XML檔案整個讀入記憶體。

  2)SAX:不需要整個讀入文檔就可以對解析出的内容進行處理,是一種逐漸解析的方法。程式也可以随時終止解析。這樣,一個大的文檔就可以逐漸的、一點一點的展現出來,是以SAX适合于大規模的解析。

  有關XML的詳細的文法和解析介紹,可以轉至下面的連結:

  10分鐘掌握XML、JSON及其解析

3. JSON語言

  JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。它基于JavaScript的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的資料交換語言。易于人閱讀和編寫,同時也易于機器解析和生成。

3.1 JSON的文法規則

  JSON 文法是 JavaScript 對象表示文法的子集。

  • 資料在名稱/值對中
  • 資料由逗号分隔
  • 花括号儲存對象
  • 方括号儲存數組

  1)JSON 資料的書寫格式是:名稱/值對。

  名稱/值對組合中的名稱寫在前面(在雙引号中),值對寫在後面(同樣在雙引号中),中間用冒号隔開:

“Name” : “Poll”      

  這很容易了解,等價于這條 JavaScript 語句:

Name=“Poll”      

  2)JSON 值可以是:

  • 數字(整數或浮點數)
  • 字元串(在雙引号中)
  • 邏輯值(true 或 false)
  • 數組(在方括号中)
  • 對象(在花括号中)
  • null

  3)JSON有兩種資料結構:

  • 對象:對象在js中表示為“{}”括起來的内容,資料結構為 {key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,是以很容易了解,取值方法為 對象.key 擷取屬性值,這個屬性值的類型可以是 數字、字元串、數組、對象幾種。
  • 數組:數組在js中是中括号“[]”括起來的内容,資料結構為 ["java","javascript","vb",...],取值方式和所有語言中一樣,使用索引擷取,字段值的類型可以是 數字、字元串、數組、對象幾種。

  經過對象、數組兩種結構就可以組合成複雜的資料結構了。

  JSON的一個簡單的例子:

{
"people": [
                { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
                { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
                { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
            ]
}      

  當然,你還可以表示的更複雜一些,例如這樣:

{ "programmers": [
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },
{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
],
"authors": [
{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
],
"musicians": [
{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
] }      

  這裡最值得注意的是,能夠表示多個值,每個值進而包含多個值。但是還應該注意,在不同的主條目(programmers、authors 和 musicians)之間,記錄中實際的名稱 / 值對可以不一樣。JSON 是完全動态的,允許在 JSON 結構的中間改變表示資料的方式。在處理 JSON 格式的資料時,沒有需要遵守的預定義的限制。是以,在同樣的資料結構中,可以改變表示資料的方式,甚至可以以不同方式表示同一事物。

  看到這裡,大家一定覺得JSON很容易了解吧。為大家提供一個小工具:JSON線上校驗格式化工具bejson,可以自己嘗試着在這裡編寫一寫簡單的JSON。

3.2 如何使用JSON?

  講了這麼多,大家一定想知道如何來使用JSON,JSON最常用的兩種使用方法分别是JavaScrip(JS)和.Net,詳細地細則請轉至下面的部落格:

  JSON詳解

  當然也可以使用其他途徑來讀取和使用JSON,例如Python等,這個需要我們共同的去學習。

3.3 XML和JSON對比

  引用網友的一句話,“JSON和XML就像武林界的屠龍刀和倚天劍,那麼他們孰強孰弱?” 那麼大家一定也很想知道,誰才是武林的霸主?下面我們就一起将他們進行一下PK吧。

  (1).可讀性方面:JSON和XML的資料可讀性基本相同,JSON和XML的可讀性可謂不相上下,一邊是建議的文法,一邊是規範的标簽形式,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).資料描述方面:SON對資料的描述性比XML較差。

  (10).傳輸速度方面:JSON的速度要遠遠快于XML。

  為了突出展示一下兩者的對比,舉一個經典的例子:

  用XML表示中國部分省市資料如下:

<?xml version="1.0" encoding="utf-8"?>
<country>
    <name>中國</name>
    <province>
        <name>黑龍江</name>
        <cities>
            <city>哈爾濱</city>
            <city>大慶</city>
        </cities>
    </province>
    <province>
        <name>廣東</name>
        <cities>
            <city>廣州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>台灣</name>
        <cities>
            <city>台北</city>
            <city>高雄</city>
        </cities>
    </province>
    <province>
        <name>新疆</name>
        <cities>
            <city>烏魯木齊</city>
        </cities>
    </province>
</country>      

  用JSON表示:

{
    "name":"中國",
    "province":[
    {
       "name":"黑龍江",
        "cities":{
            "city":["哈爾濱","大慶"]
        }
     },
     {
        "name":"廣東",
        "cities":{
            "city":["廣州","深圳","珠海"]
        }
    },
    {
        "name":"台灣",
        "cities":{
            "city":["台北","高雄"]
        }
    },
    {
        "name":"新疆",
        "cities":{
            "city":["烏魯木齊"]
        }
    }
]
}      

  講了這麼多,大家也肯定是淩亂了,不光是你們,就是我也記不住這麼多的内容。其實,總結一點就是:XML更像是資料傳輸界的長老,相對于JSON而言是一種重量型的資料交換格式;而JSON就是後起之秀,是一種輕量型的資料交換格式,兩個各有優缺點,孰輕孰重還要看具體的應用環境。

  最後,向大家推薦兩個相關的部落格:

  1)JSON資料整理

  2)JSON與XML的差別比較

作者:Poll的筆記

部落格出處:http://www.cnblogs.com/maybe2030/

本文版權歸作者和部落格園所有,歡迎轉載,轉載請标明出處。

<如果你覺得本文還不錯,對你的學習帶來了些許幫助,請幫忙點選右下角的推薦>

繼續閱讀