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