1. 程式人生 > >java第七周----json

java第七周----json

一個 add ati RM 以及 lpad order 常用js 輕量

JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基於 ECMAScript (歐洲計算機協會制定的js規範)的一個子集,采用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網絡傳輸效率。

JSON 語法規則

在 JS 語言中,一切都是對象。因此,任何支持的類型都可以通過 JSON 來表示,例如字符串、數字、對象、數組等。但是對象和數組是比較特殊且常用的兩種類型:
  • 對象表示為鍵值對
  • 數據由逗號分隔
  • 花括號保存對象
  • 方括號保存數組

JSON 鍵/值對

JSON 鍵值對是用來保存 JS 對象的一種方式,和 JS 對象的寫法也大同小異,鍵/值對組合中的鍵名寫在前面並用雙引號 "" 包裹,使用冒號 : 分隔,然後緊接著值:
1 {"firstName": "Json"}
這很容易理解,等價於這條 JavaScript 語句:
1 {firstName : "Json"}

JSON 與 JS 對象的關系

很多人搞不清楚 JSON 和 Js 對象的關系,甚至連誰是誰都不清楚。其實,可以這麽理解: JSON 是 JS 對象的字符串表示法,它使用文本表示一個 JS 對象的信息,本質是一個字符串。
1 var obj = {a: ‘Hello‘, b: ‘World‘}; //這是一個對象,註意鍵名也是可以使用引號包裹的
1 var json = ‘{"a": "Hello", "b": "World"}‘; //這是一個 JSON 字符串,本質是一個字符串

JSON 和 JS 對象互轉

要實現從對象轉換為 JSON 字符串,使用 JSON.stringify() 方法:
1 var json = JSON.stringify({a: ‘Hello‘, b: ‘World‘}); //結果是 ‘{"a": "Hello", "b": "World"}‘
要實現從 JSON 轉換為對象,使用 JSON.parse() 方法:
1 var obj = JSON.parse(‘{"a": "Hello", "b": "World"}‘); //結果是 {a: ‘Hello‘, b: ‘World‘}

常用類型

編輯 在 JS 語言中,一切都是對象。因此,任何支持的類型都可以通過 JSON 來表示,例如字符串、數字、對象、數組等。但是對象和數組是比較特殊且常用的兩種類型。 對象:對象在 JS 中是使用花括號包裹 {} 起來的內容,數據結構為 {key1:value1, key2:value2, ...} 的鍵值對結構。在面向對象的語言中,key 為對象的屬性,value 為對應的值。鍵名可以使用整數和字符串來表示。值的類型可以是任意類型。 數組:數組在 JS 中是方括號 [] 包裹起來的內容,數據結構為 ["java", "javascript", "vb", ...] 的索引結構。在 JS 中,數組是一種比較特殊的數據類型,它也可以像對象那樣使用鍵值對,但還是索引使用得多。同樣,值的類型可以是任意類型。

基礎示例

編輯 簡單地說 [1] ,JSON 可以將 JavaScript 對象中表示的一組數據轉換為字符串,然後就可以在網絡或者程序之間輕松地傳遞這個字符串,並在需要的時候將它還原為各編程語言所支持的數據格式,例如在 PHP 中,可以將 JSON 還原為數組或者一個基本對象。在用到AJAX時,如果需要用到數組傳值,這時就需要用JSON將數組轉化為字符串。

表示對象

JSON最常用的格式是對象的 鍵值對。例如下面這樣:
1 {"firstName": "Brett", "lastName": "McLaughlin"}

表示數組

和普通的 JS 數組一樣,JSON 表示數組的方式也是使用方括號 []。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 { "people":[ { "firstName": "Brett", "lastName":"McLaughlin" }, { "firstName":"Jason", "lastName":"Hunter" } ] }
這不難理解。在這個示例中,只有一個名為 people的變量,值是包含兩個條目的數組,每個條目是一個人的記錄,其中包含名和姓。上面的示例演示如何用括號將記錄組合成一個值。當然,可以使用相同的語法表示更過多的值(每個值包含多個記錄)。 在處理 JSON 格式的數據時,沒有需要遵守的預定義的約束。所以,在同樣的數據結構中,可以改變表示數據的方式,也可以使用不同方式表示同一事物。 如前面所說,除了對象和數組,你也可以簡單地使用字符串或者數字等來存儲簡單的數據,但這樣並沒有多大意義。

和XML的比較


可讀性

JSON和XML的可讀性可謂不相上下,一邊是簡易的語法,一邊是規範的標簽形式,很難分出勝負。

可擴展性

XML天生有很好的擴展性,JSON當然也有,沒有什麽是XML可以擴展而JSON卻不能擴展的。不過JSON在Javascript主場作戰,可以存儲Javascript復合對象,有著xml不可比擬的優勢。

編碼難度

XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有提供的工具。無工具的情況下,相信熟練的開發人員一樣能很快的寫出想要的xml文檔和JSON字符串,不過,xml文檔要多很多結構上的字符。

解碼難度

XML的解析方式有兩種: 一是通過文檔模型解析,也就是通過父標簽索引出一組標記。例如:xmlData.getElementsByTagName("tagName"),但是這樣是要在預先知道文檔結構的情況下使用,無法進行通用的封裝。 另外一種方法是遍歷節點(document 以及 childNodes)。這個可以通過遞歸來實現,不過解析出來的數據仍舊是形式各異,往往也不能滿足預先的要求。 凡是這樣可擴展的結構數據解析起來一定都很困難。 JSON也同樣如此。如果預先知道JSON結構的情況下,使用JSON進行數據傳遞簡直是太美妙了,可以寫出很實用美觀可讀性強的代碼。如果你是純粹的前臺開發人員,一定會非常喜歡JSON。但是如果你是一個應用開發人員,就不是那麽喜歡了,畢竟xml才是真正的結構化標記語言,用於進行數據傳遞。 而如果不知道JSON的結構而去解析JSON的話,那簡直是噩夢。費時費力不說,代碼也會變得冗余拖沓,得到的結果也不盡人意。但是這樣也不影響眾多前臺開發人員選擇JSON。因為json.js中的toJSONString()就可以看到JSON的字符串結構。當然不是使用這個字符串,這樣仍舊是噩夢。常用JSON的人看到這個字符串之後,就對JSON的結構很明了了,就更容易的操作JSON。 以上是在Javascript中僅對於數據傳遞的xml與JSON的解析。在Javascript地盤內,JSON畢竟是主場作戰,其優勢當然要遠遠優越於xml。如果JSON中存儲Javascript復合對象,而且不知道其結構的話,我相信很多程序員也一樣是哭著解析JSON的。 除了上述之外,JSON和XML還有另外一個很大的區別在於有效數據率。JSON作為數據包格式傳輸的時候具有更高的效率,這是因為JSON不像XML那樣需要有嚴格的閉合標簽,這就讓有效數據量與總數據包比大大提升,從而減少同等數據流量的情況下,網絡的傳輸壓力 [2 。

實例比較

XML和JSON都使用結構化方法來標記數據,下面來做一個簡單的比較。 用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": ["烏魯木齊"]
        }
    }]
}

  

java第七周----json