JSON數據格式_第1頁
JSON數據格式_第2頁
JSON數據格式_第3頁
JSON數據格式_第4頁
JSON數據格式_第5頁
已閱讀5頁,還剩5頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、JSON數據格式JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。JSON采用完全獨立于語言的文本格式,這些特性使JSON成為理想的數據交換語言。易于人閱讀和編寫,同時也易于機器解析和生成?;A結構JSON建構于兩種結構:1.“名稱/值”對的集合(A collection of name/value pairs )。不同的語言中,它被理解為對象(object),記錄(record),結構(struct ),字典(dictionary ), 哈希表(hash table ),有鍵列表(keyed list ),或者關聯數組 (associative a

2、rray )。2.值的有序列表(An ordered list of values )。在大部分語言中,它被理解 為數組(array )。基礎示例簡單地說,JSO N可以將JavaScript 對象中表示的一組數據轉換為字符串,然 后就可以在函數之間輕松地傳遞這個字符串,或者在異步應用程序中將字符串從 Web客戶機傳遞給服務器端程序。這個字符串看起來有點兒古怪,但是JavaScript 很容易解釋它,而且JSON可以表示比名稱/值對更復雜的結構 例如,可以表示數組和復雜的對象,而不僅僅是鍵和值的簡單列表。表示名稱/值對按照最簡單的形式,可以用下面這樣的 JSON表示名稱/值對: firstNa

3、me: Brett 這個示例非?;荆覍嶋H上比等效的純文本名稱/值對占用更多的空間:firstName=Brett但是,當將多個名稱/值對串在一起時,JSON就會體現出它的價值了。首先, 可以創建包含多個名稱/值對的 記錄,比如: firstName: Brett, lastName:McLaughli n, email: aaaa 從語法方面來看,這與名稱/值對相比并沒有很大的優勢,但是在這種情況 下JSON更容易使用,而且可讀性更好。例如,它明確地表示以上三個值都是同 一記錄的一部分;花括號使這些值有了某種聯系。表示數組當需要表示一組值時,JSO N不但能夠提高可讀性,而且可以減少復雜

4、性。例如, 假設您希望表示一個人名列表。在 XML中,需要許多開始標記和結束標記;如 果使用典型的 名稱/值對(就像在本系列前面文章中看到的那種名稱/值對),那么必須建立一種專有的數據格式,或者將鍵名稱修改為pers on 1-firstName 這樣的形式。如果使用JSON,就只需將多個帶花括號的記錄分組在一起: people: firstName: Brett, lastName:McLaughli n, email: aaaa , firstName: Jaso n, lastName:Hu nter, email: bbbb, firstName: Elliotte, lastName

5、:Harold, email: cccc 這不難理解。在這個示例中,只有一個名為 people的變量,值是包含三個條目 的數組,每個條目是一個人的記錄,其中包含名、姓和電子郵件地址。上面的示 例演示如何用括號將記錄組合成一個值。當然,可以使用相同的語法表示多個值(每個值包含多個記錄): programmers: firstName: Brett, lastName:McLaughli n, email: aaaa , firstName: Jaso n, lastName:Hu nter, email: bbbb , firstName: Elliotte, lastName:Harold,

6、email: cccc ,authors: firstName: Isaac, lastName: Asimov, ge nre: scie ncefictio n , firstName: Tad, lastName: Williams, ge nre: fa ntasy, firstName: Fra nk, lastName: Peretti, ge nre: christia n fictio n ,musicia ns: firstName: Eric, lastName: Clapton,instrument: guitar, firstName: Sergei, lastName

7、: Rachma nino ff, i nstrume nt:pia no 這里最值得注意的是,能夠表示多個值,每個值進而包含多個值。但是還應該注 意,在不同的主條目(programmers、authors 和 musicians ) 之間,記錄中實 際的名稱/值對可以不一樣。JSON是完全動態的,允許在JSON結構的中間改 變表示數據的方式。在處理JSON格式的數據時,沒有需要遵守的預定義的約束。 所以,在同樣的數 據結構中,可以改變表示數據的方式,甚至可以以不同方式表示同一事物。格式應用掌握了 JSON格式之后,在JavaScript中使用它就很簡單了。JSON是JavaScript 原生

8、格式,這意味著在JavaScript 中處理JSON數據不需要任何 特殊的API或工具包。將JSON數據賦值給變量例如,可以創建一個新的JavaScript 變量,然后將JSON格式的數據字符串直 接賦值給它:var people = programmers: firstName: Brett,lastName:McLaughli n, email: aaaa , firstName: Jaso n, lastName:Hu nter, email: bbbb , firstName: Elliotte, lastName:Harold, email: cccc , authors: firs

9、tName: Isaac, lastName: Asimov, ge nre: scie nee fictio n , firstName: Tad, lastName: Williams, ge nre: fa ntasy, firstName: Fra nk, lastName: Peretti, ge nre: christia n fictio n ,musicia ns: firstName: Eric, lastName: Clapton,instrument: guitar , firstName: Sergei, lastName: Rachma nino ff, i nstr

10、ume nt:pia no 這非常簡單;現在people包含前面看到的JSON格式的數據。但是,這還不夠, 因為訪問數據的方式似乎還不明顯。訪問數據盡管看起來不明顯,但是上面的長字符串實際上只是一個數組;將這個數組放進JavaScript變量之后,就可以很輕松地訪問它。實際上,只需用點號表示法來 表示數組元素。所以,要想訪問 programmers列表的第一個條目的姓氏,只需 在JavaScript 中使用下面這樣的代碼:grammers0.lastName;注意,數組索引是從零開始的。所以,這行代碼首先訪問people變量中的數據; 然后移動到稱為programmers的

11、條目,再移動到第一個記錄(0);最后,訪 問lastName鍵的值。結果是字符串值“McLaughlin ”。F面是使用同一變量的幾個示例。people.authors1.ge nre / Value is fan tasypeople.musicia ns3.lastName / Un defi ned. This refers to the fourth en try, and there isnt one grammers2.firstName / Value is Elliotte 利用這樣的語法,可以處理任何 JSON格式的數據,而不需要使用任何額外的 JavaS

12、cript 工具包或 API。修改JSON數據正如可以用點號和括號訪問數據,也可以按照同樣的方式輕松地修改數據:people.musicia ns1.lastName = Rachma ninov;在將字符串轉換為JavaScript對象之后,就可以像這樣修改變量中的數據轉換回字符串當然,如果不能輕松地將對象轉換回本文提到的文本格式,那么所有數據修改都沒有太大的價值。在JavaScript中這種轉換也很簡單:Stri ng newJSONtext = people.toJSONStri ng();這樣就行了!現在就獲得了一個可以在任何地方使用的文本字符串,例如,可以將它用作Ajax應用程序中的

13、請求字符串。更重要的是,可以將任何JavaScript對象轉換為JSON文本。并非只能處理原 來用JSON字符串賦值的變量。為了對名為 myObject的對象進行轉換,只需執 行相同形式的命令:Stri ng myObjectI nJSON = myObject.toJSONStri ng();這就是JSON與本系列討論的其他數據格式之間最大的差異。如果使用JSON,只需調用一個簡單的函數,就可以獲得經過格式化的數據,可以直接使用了。對 于其他數據格式,需要在原始數據和格式化數據之間進行轉換。即使使用DocumentObject Model這樣的API (提供了將自己的數據結構轉換為文本的函

14、數),也需要學習這個API并使用API的對象,而不是使用原生的JavaScript 對象和語法。最終結論是,如果要處理大量JavaScript 對象,那么JSON幾乎肯定是一個好 選擇,這樣就可以輕松地將數據轉換為可以在請求中發送給服務器端程序的格式。概念比較JSONffi XML勺比較可讀性JSONffi XML勺可讀性可謂不相上下,一邊是簡易的語法,一邊是規范的標簽形 式,很難分出勝負??蓴U展性XML天生有很好的擴展性,JSON當然也有,沒有什么是XML能擴展,而JSON卻 不能。不過JSON在Javascript 主場作戰,可以存儲 Javascript 復合對象,有 著xml不可比擬的

15、優勢。編碼難度XML有豐富的編碼工具,比如 Dom4、JDom等, JSON也有提供的工具。無工具的 情況下,相信熟練的開發人員一樣能很快的寫出想要的 xml文檔和JSON?符串, 不過,xml文檔要多很多結構上的字符。解碼難度XML的解析方式有兩種:一是通過文檔模型解析,也就是通過父標簽索引出一組標記。例如:xmlData.getElementsByTagName(tagName),但是這樣是要在預先知道文檔結 構的情況下使用,無法進行通用的封裝。另外一種方法是遍歷節點(document以及childNodes )。這個可以通過遞歸來 實現,不過解析出來的數據仍舊是形式各異,往往也不能滿足預

16、先的要求。凡是這樣可擴展的結構數據解析起來一定都很困難。JSON也同樣如此。如果預先知道 JSON結構的情況下,使用JSON進行數據傳遞 簡直是太美妙了,可以寫出很實用美觀可讀性強的代碼。如果你是純粹的前臺開 發人員,一定會非常喜歡JSON但是如果你是一個應用開發人員,就不是那么 喜歡了,畢竟xml才是真正的結構化標記語言,用于進行數據傳遞。而如果不知道JSON的結構而去解析JSON的話,那簡直是噩夢。費時費力不說, 代碼也會變得冗余拖沓,得到的結果也不盡人意。但是這樣也不影響眾多前臺開 發人員選擇JSON因為json.js 中的toJSONString()就可以看到JSON的字符串 結構。當

17、然不是使用這個字符串,這樣仍舊是噩夢。常用JSON的人看到這個字符串之后,就對JSON的結構很明了了,就更容易的操作 JSON以上是在Javascript 中僅對于數據傳遞的xml與JSON的解析。在Javascript 地盤內,JSON畢竟是主場作戰,其優勢當然要遠遠優越于xml。如果JSON中存儲Javascript復合對象,而且不知道其結構的話,我相信很多程序員也一樣是 哭著解析JSON勺。實例比較XML和JSOhtE使用結構化方法來標記數據,下面來做一個簡單的比較。用XML表示中國部分省市數據如下:中國 vprovi nce黑龍江 哈爾濱 大慶 廣東 廣州 深圳 珠海 用JSON表示如

18、下:name:中國, province: name: 黑龍江, cities: city:哈爾濱,大慶,name:廣東, cities: city:廣州,深圳,珠海編碼的可讀性,xml有明顯的優勢,畢竟人類的語言更貼近這樣的說明結構。json 讀起來更像一個數據塊,讀起來就比較費解了。不過,我們讀起來費解的語言,恰恰是適合機器閱讀,所以通過json的索引. 就能夠讀取“黑 龍江”這個值。編碼的手寫難度來說,xml還是舒服一些,好讀當然就好寫。不過寫出來的字符 JSON就明顯少很多。去掉空白制表以及換行的話,JSON就是密密麻麻的有用數據,而xml卻包含很多重復的標記字符。JSON在線校驗工具刖言JSON格式取代了 xml給網絡傳輸帶來了很大的便利,但是卻沒有了 xml的一目了 然,尤其是json數據很長的時候,我們會陷入繁瑣復雜的數據節點查找中。但是國人的一款在線工具BeJson給眾多程序員帶來了一陣涼風。功能簡介1. JSON格式化校驗很多人在得到JSON數據后,一時沒有辦法判斷JSOF數據格式是否正確,是否少或 多符號而導致程序不能解析,這個功能正好能幫助大家來完成JSON格式的校驗。2. JSON視圖想必很多程序員都會遇到當找一個節點的時候,會發現如果直接對著一行行數據 無從下手

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論