久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔
站長百科 | 數(shù)字化技能提升教程 數(shù)字化時代生存寶典
首頁
數(shù)字化百科
電子書
建站程序
開發(fā)
服務(wù)器
辦公軟件
開發(fā)教程
服務(wù)器教程
軟件使用教程
運營教程
熱門電子書
WordPress教程
寶塔面板教程
CSS教程
Shopify教程
導(dǎo)航
程序頻道
推廣頻道
網(wǎng)賺頻道
人物頻道
網(wǎng)站程序
網(wǎng)頁制作
云計算
服務(wù)器
CMS
論壇
網(wǎng)店
虛擬主機
cPanel
網(wǎng)址導(dǎo)航
WIKI使用導(dǎo)航
WIKI首頁
最新資訊
網(wǎng)站程序
站長人物
頁面分類
使用幫助
編輯測試
創(chuàng)建條目
網(wǎng)站地圖
站長百科導(dǎo)航
站長百科
主機偵探
IDCtalk云說
跨境電商導(dǎo)航
WordPress啦
站長專題
網(wǎng)站推廣
網(wǎng)站程序
網(wǎng)站賺錢
虛擬主機
cPanel
網(wǎng)址導(dǎo)航專題
云計算
微博營銷
虛擬主機管理系統(tǒng)
開放平臺
WIKI程序與應(yīng)用
美國十大主機
編輯“
JSON
”
人物百科
|
營銷百科
|
網(wǎng)賺百科
|
站長工具
|
網(wǎng)站程序
|
域名主機
|
互聯(lián)網(wǎng)公司
|
分類索引
跳轉(zhuǎn)至:
導(dǎo)航
、?
搜索
警告:
您沒有登錄。如果您做出任意編輯,您的IP地址將會公開可見。如果您
登錄
或
創(chuàng)建
一個賬戶,您的編輯將歸屬于您的用戶名,且將享受其他好處。
反垃圾檢查。
不要
加入這個!
[[Image:json_logo.gif|right|300px|thumb|JSON [[logo]]]] '''JSON'''(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。易于人閱讀和編寫,同時也易于機器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于[[C語言]]家族的習(xí)慣(包括[[C]], [[C++]], [[C#]], [[Java]], [[JavaScript]], [[Perl]], [[Python]]等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言。 == 結(jié)構(gòu)與形式 == *JSON建構(gòu)于兩種結(jié)構(gòu): ;1. “名稱/值”對的集合(A collection of name/value pairs)。 不同的語言中,它被理解為對象(object),記錄(record),結(jié)構(gòu)(struct),字典(dictionary),[[哈希表]](hash table),有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組 (associative array)。 ;2. 值的有序列表(An ordered list of values)。 在大部分語言中,它被理解為數(shù)組(array)。 *這些都是常見的[[數(shù)據(jù)結(jié)構(gòu)]]。事實上大部分現(xiàn)代[[計算機]]語言都以某種形式支持它們。這使得一種數(shù)據(jù)格式在同樣基于這些結(jié)構(gòu)的編程語言之間交換成為可能。JSON具有以下這些形式: *對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結(jié)束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。 數(shù)組是值(value)的有序集合。一個數(shù)組以“[”(左中括號)開始,“]”(右中括號)結(jié)束。值之間使用“,”(逗號)分隔。 *值(value)可以是雙引號括起來的字符串([[string]])、數(shù)值(number)、 true、false、 null、對象(object)或者數(shù)組(array)。這些結(jié)構(gòu)可以嵌套。 *[[字符串]](string)是由雙引號包圍的任意數(shù)量[[Unicode]]字符的集合,使用反斜線轉(zhuǎn)義。一個字符(character)即一個單獨的字符串(character string)。 除去一些編碼細節(jié),以下描述了完整的語言。 *字符串(string)與C或者Java的字符串非常相似。除去未曾使用的[[八進制]]與[[十六進制]]格式,數(shù)值(number)也與C或者Java的數(shù)值非常相似??瞻卓梢约尤氲饺魏畏栔g。 [[Image:json.gif|right|300px]] == JSON實例 == *簡單地說 ,JSON 可以將 JavaScript 對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個字符串,或者在異步應(yīng)用程序中將字符串從 [[Web]] [[客戶端]]傳遞給[[服務(wù)器]]端[[程序]]。這個字符串看起來有點兒古怪,但是 JavaScript 很容易解釋它,而且 JSON 可以表示比名稱 / 值對更復(fù)雜的結(jié)構(gòu)。例如,可以表示數(shù)組和復(fù)雜的對象,而不僅僅是鍵和值的簡單列表。 '''簡單 JSON 示例''' 按照最簡單的形式,可以用下面這樣的 JSON 表示名稱 / 值對: { "firstName": "Brett" } 這個示例非常基本,而且實際上比等效的純文本名稱 / 值對占用更多的空間: firstName=Brett 但是,當(dāng)將多個名稱 / 值對串在一起時,JSON 就會體現(xiàn)出它的價值了。首先,可以創(chuàng)建包含多個名稱 / 值對的 記錄,比如: { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" } *從語法方面來看,這與名稱 / 值對相比并沒有很大的優(yōu)勢,但是在這種情況下 JSON 更容易使用,而且可讀性更好。例如,它明確地表示以上三個值都是同一記錄的一部分;花括號使這些值有了某種聯(lián)系。 '''值的數(shù)組''' *當(dāng)需要表示一組值時,JSON 不但能夠提高可讀性,而且可以減少復(fù)雜性。例如,假設(shè)您希望表示一個人名列表。在 XML 中,需要許多開始標(biāo)記和結(jié)束標(biāo)記;如果使用典型的名稱 / 值對(就像在本系列前面文章中看到的那種名稱 / 值對),那么必須建立一種專有的數(shù)據(jù)格式,或者將鍵名稱修改為 person1-firstName這樣的形式。 *如果使用 JSON,就只需將多個帶花括號的記錄分組在一起: <pre> { "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"}, { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } ]} </pre> *這不難理解。在這個示例中,只有一個名為 people的變量,值是包含三個條目的數(shù)組,每個條目是一個人的記錄,其中包含名、姓和電子郵件地址。上面的示例演示如何用括號將記錄組合成一個值。當(dāng)然,可以使用相同的語法表示多個值(每個值包含多個記錄): <pre> { "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" } ] } </pre> *這里最值得注意的是,能夠表示多個值,每個值進而包含多個值。但是還應(yīng)該注意,在不同的主條目(programmers、authors 和 musicians)之間,記錄中實際的名稱 / 值對可以不一樣。JSON 是完全動態(tài)的,允許在 JSON 結(jié)構(gòu)的中間改變表示數(shù)據(jù)的方式。 *在處理 JSON 格式的數(shù)據(jù)時,沒有需要遵守的預(yù)定義的約束。所以,在同樣的數(shù)據(jù)結(jié)構(gòu)中,可以改變表示數(shù)據(jù)的方式,甚至可以以不同方式表示同一事物。 == JSON格式應(yīng)用 == *掌握了 JSON 格式之后,在 JavaScript 中使用它就很簡單了。JSON 是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON 數(shù)據(jù)不需要任何特殊的 API 或工具包。 *將 JSON 數(shù)據(jù)賦值給變量 例如,可以創(chuàng)建一個新的 JavaScript 變量,然后將 JSON 格式的數(shù)據(jù)字符串直接賦值給它: <pre> var people = { "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" } ] } </pre> *這非常簡單;現(xiàn)在 people包含前面看到的 JSON 格式的數(shù)據(jù)。但是,這還不夠,因為訪問數(shù)據(jù)的方式似乎還不明顯。 訪問數(shù)據(jù) *盡管看起來不明顯,但是上面的長字符串實際上只是一個數(shù)組;將這個數(shù)組放進 JavaScript 變量之后,就可以很輕松地訪問它。實際上,只需用點號表示法來表示數(shù)組元素。所以,要想訪問 programmers 列表的第一個條目的姓氏,只需在 JavaScript 中使用下面這樣的代碼: people.programmers[0].lastName; *注意,數(shù)組索引是從零開始的。所以,這行代碼首先訪問 people變量中的數(shù)據(jù);然后移動到稱為 programmers的條目,再移動到第一個記錄([0]);最后,訪問 lastName鍵的值。結(jié)果是字符串值 “McLaughlin”。 *下面是使用同一變量的幾個示例。 <pre> people.authors[1].genre // Value is "fantasy" people.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isn't one people.programmers.[2].firstName // Value is "Elliotte" </pre> *利用這樣的語法,可以處理任何 JSON 格式的數(shù)據(jù),而不需要使用任何額外的 JavaScript 工具包或 [[API]]。 '''修改 JSON 數(shù)據(jù)''' *正如可以用點號和括號訪問數(shù)據(jù),也可以按照同樣的方式輕松地修改數(shù)據(jù): people.musicians[1].lastName = "Rachmaninov"; *在將字符串轉(zhuǎn)換為 JavaScript 對象之后,就可以像這樣修改變量中的數(shù)據(jù)。 '''轉(zhuǎn)換回字符串''' *當(dāng)然,如果不能輕松地將對象轉(zhuǎn)換回本文提到的文本格式,那么所有數(shù)據(jù)修改都沒有太大的價值。在 JavaScript 中這種轉(zhuǎn)換也很簡單: String newJSONtext = people.toJSONString(); *這樣就行了!現(xiàn)在就獲得了一個可以在任何地方使用的文本字符串,例如,可以將它用作 Ajax 應(yīng)用程序中的請求字符串。 *更重要的是,可以將 任何JavaScript 對象轉(zhuǎn)換為 JSON 文本。并非只能處理原來用 JSON 字符串賦值的變量。為了對名為 myObject的對象進行轉(zhuǎn)換,只需執(zhí)行相同形式的命令: String myObjectInJSON = myObject.toJSONString(); *這就是 JSON 與本系列討論的其他數(shù)據(jù)格式之間最大的差異。如果使用 JSON,只需調(diào)用一個簡單的函數(shù),就可以獲得經(jīng)過格式化的數(shù)據(jù),可以直接使用了。對于其他數(shù)據(jù)格式,需要在原始數(shù)據(jù)和格式化數(shù)據(jù)之間進行轉(zhuǎn)換。即使使用 Document Object Model 這樣的 API(提供了將自己的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為文本的函數(shù)),也需要學(xué)習(xí)這個 API 并使用 API 的對象,而不是使用原生的 JavaScript 對象和語法。 *最終結(jié)論是,如果要處理大量 JavaScript 對象,那么 JSON 幾乎肯定是一個好選擇,這樣就可以輕松地將數(shù)據(jù)轉(zhuǎn)換為可以在請求中發(fā)送給服務(wù)器端程序的格式。 == 概念比較 == '''JSON和XML的比較''' ◆可讀性 :JSON和XML的可讀性可謂不相上下,一邊是簡易的語法,一邊是規(guī)范的標(biāo)簽形式,很難分出勝負。 ◆可擴展性 :XML天生有很好的擴展性,JSON當(dāng)然也有,沒有什么是XML能擴展,JSON不能的。不過JSON在Javascript主場作戰(zhàn),可以存儲Javascript復(fù)合對象,有著xml不可比擬的優(yōu)勢。 ◆編碼難度 :XML有豐富的編碼工具,比如[[Dom4j]]、[[JDom]]等,JSON也有提供的工具。無工具的情況下,相信熟練的開發(fā)人員一樣能很快的寫出想要的xml文檔和JSON字符串,不過,xml文檔要多很多結(jié)構(gòu)上的字符。 ◆解碼難度 :XML的解析方式有兩種: #一是通過文檔模型解析,也就是通過父標(biāo)簽索引出一組標(biāo)記。例如:xmlData.getElementsByTagName("tagName"),但是這樣是要在預(yù)先知道文檔結(jié)構(gòu)的情況下使用,無法進行通用的封裝。 #另外一種方法是遍歷節(jié)點(document 以及 childNodes)。這個可以通過遞歸來實現(xiàn),不過解析出來的數(shù)據(jù)仍舊是形式各異,往往也不能滿足預(yù)先的要求。 *凡是這樣可擴展的結(jié)構(gòu)數(shù)據(jù)解析起來一定都很困難。JSON也同樣如此。如果預(yù)先知道JSON結(jié)構(gòu)的情況下,使用JSON進行數(shù)據(jù)傳遞簡直是太美妙了,可以寫出很實用美觀可讀性強的代碼。如果你是純粹的前臺開發(fā)人員,一定會非常喜歡JSON。但是如果你是一個應(yīng)用開發(fā)人員,就不是那么喜歡了,畢竟xml才是真正的結(jié)構(gòu)化標(biāo)記語言,用于進行數(shù)據(jù)傳遞。 *而如果不知道JSON的結(jié)構(gòu)而去解析JSON的話,費時費力不說,代碼也會變得冗余拖沓,得到的結(jié)果也不盡人意。但是這樣也不影響眾多前臺開發(fā)人員選擇JSON。因為json.js中的toJSONString()就可以看到JSON的字符串結(jié)構(gòu)。常用JSON的人看到這個字符串之后,就對JSON的結(jié)構(gòu)很明了了,就更容易的操作JSON。 *以上是在Javascript中僅對于數(shù)據(jù)傳遞的xml與JSON的解析。在Javascript地盤內(nèi),JSON畢竟是主場作戰(zhàn),其優(yōu)勢當(dāng)然要遠遠優(yōu)越于xml。如果JSON中存儲Javascript復(fù)合對象,而且不知道其結(jié)構(gòu)的話,我相信很多程序員也一樣是哭著解析JSON的。 ◆實例比較 :XML和JSON都使用結(jié)構(gòu)化方法來標(biāo)記數(shù)據(jù),下面來做一個簡單的比較。 :用XML表示中國部分省市數(shù)據(jù)如下: <pre> <?xml version="1.0" encoding="utf-8"?> <country> <name>中國</name> <province> <name>安徽省</name> <citys> <city>合肥市</city> <city>安慶市</city> </citys> </province> <province> <name>廣東</name> <citys> <city>廣州</city> <city>深圳</city> <city>珠海</city> </citys> </province> <province> <name>臺灣</name> <citys> <city>臺北</city> <city>高雄</city> </citys> </province> <province> <name>新疆</name> <citys> <city>烏魯木齊</city> </citys> </province> </country> 用JSON表示如下: { name:"中國", province:[ { name:"安徽省", citys:{ city:["合肥市","安慶市"] } }, { name:"廣東", citys:{ city:["廣州","深圳","珠海"] } }, { name:"臺灣", citys:{ city:["臺北","高雄"] } }, { name:"新疆", citys:{ city:["烏魯木齊"] } } ] } </pre> *編碼的可讀性,xml有明顯的優(yōu)勢,畢竟人類的語言更貼近這樣的說明結(jié)構(gòu)。json讀起來更像一個數(shù)據(jù)塊,讀起來就比較費解了。不過,我們讀起來費解的語言,恰恰是適合機器閱讀,所以通過json的索引.province[0].name就能夠讀取“黑龍江”這個值。 *編碼的手寫難度來說,xml還是舒服一些,好讀當(dāng)然就好寫。不過寫出來的字符JSON就明顯少很多。去掉空白制表以及換行的話,JSON就是密密麻麻的有用數(shù)據(jù),而xml卻包含很多重復(fù)的標(biāo)記字符。 == 相關(guān)條目 == *[[xml]] *[[java]] *[[http]] *[[js]] *[[ajax]] *[[YAML]] *[[web 2.0]] == 參考來源 == *http://zh.wikipedia.org/wiki/JSON *http://www.json.org/json-zh.html [[category:XML|J]]
摘要:
請注意,您對站長百科的所有貢獻都可能被其他貢獻者編輯,修改或刪除。如果您不希望您的文字被任意修改和再散布,請不要提交。
您同時也要向我們保證您所提交的內(nèi)容是您自己所作,或得自一個不受版權(quán)保護或相似自由的來源(參閱
Wordpress-mediawiki:版權(quán)
的細節(jié))。
未經(jīng)許可,請勿提交受版權(quán)保護的作品!
取消
編輯幫助
(在新窗口中打開)
取自“
http://kktzf.com.cn/wiki/JSON
”