JSON 數(shù)據(jù)格式
?????? JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式
基礎(chǔ)結(jié)構(gòu)
JSON建構(gòu)于兩種結(jié)構(gòu):
1. “名稱/值”對(duì)的集合慈迈。
? ? ?不同的語言中,它被理解為對(duì)象(object),記錄(record)痒留,結(jié)構(gòu)(struct)谴麦,字典(dictionary),哈希表(hash table)伸头,有鍵列表(keyed list)匾效,或者關(guān)聯(lián)數(shù)組 (associative array)。
2. 值的有序列表恤磷。在大部分語言中面哼,它被理解為數(shù)組(array)。
JSON中不允許Key值重復(fù)
基礎(chǔ)示例
簡(jiǎn)單地說扫步,JSON 可以將 JavaScript 對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串魔策,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從 Web 客戶機(jī)傳遞給服務(wù)器端程序河胎。
表示名稱 / 值對(duì)
按照最簡(jiǎn)單的形式闯袒,可以用下面這樣的 JSON 表示 "名稱 / 值對(duì)" :{ "firstName": "Brett" }
這個(gè)示例非常基本游岳,而且實(shí)際上比等效的純文本 "名稱 / 值對(duì)" 占用更多的空間:firstName=Brett
但是政敢,當(dāng)將多個(gè)"名稱 / 值對(duì)"串在一起時(shí),JSON 就會(huì)體現(xiàn)出它的價(jià)值了胚迫。首先喷户,可以創(chuàng)建包含多個(gè)"名稱 / 值對(duì)"的 記錄,比如:
{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" } = A1
從語法方面來看访锻,這與"名稱 / 值對(duì)"相比并沒有很大的優(yōu)勢(shì)摩骨,但是在這種情況下 JSON 更容易使用,而且可讀性更好朗若。例如,它明確地表示以上三個(gè)值都是同一記錄的一部分昌罩;花括號(hào)使這些值有了某種聯(lián)系哭懈。
表示數(shù)組
當(dāng)需要表示一組值時(shí),JSON 不但能夠提高可讀性茎用,而且可以減少復(fù)雜性遣总。例如,假設(shè)您希望表示一個(gè)人名列表轨功。在 XML 中旭斥,需要許多開始標(biāo)記和結(jié)束標(biāo)記;如果使用典型的 名稱 / 值 對(duì)(就像在本系列前面文章中看到的那種名稱 / 值對(duì))古涧,那么必須建立一種專有的數(shù)據(jù)格式垂券,或者將鍵名稱修改為 person1-firstName這樣的形式。
如果使用 JSON羡滑,就只需將多個(gè)帶花括號(hào)的記錄分組在一起:
eg:{“people”:[A1],[A2],[A3]
? ? ? ? ? "autors":[B1],[B2],[B3]
? ? ? ? ? ? ? -----
? ? ? ?}=B1
格式的應(yīng)用
將 JSON 數(shù)據(jù)賦值給變量
var 變量 = ?B1
訪問數(shù)據(jù)
修改JSON數(shù)據(jù)
轉(zhuǎn)換回字符串
概念比較
JSON和XML的比較
◆可讀性
JSON和XML的可讀性可謂不相上下菇爪,一邊是簡(jiǎn)易的語法算芯,一邊是規(guī)范的標(biāo)簽形式,很難分出勝負(fù)凳宙。
◆可擴(kuò)展性
XML天生有很好的擴(kuò)展性熙揍,JSON當(dāng)然也有,沒有什么是XML能擴(kuò)展氏涩,而JSON卻不能届囚。不過JSON在Javascript主場(chǎng)作戰(zhàn),可以存儲(chǔ)Javascript復(fù)合對(duì)象是尖,有著xml不可比擬的優(yōu)勢(shì)意系。
◆編碼難度
XML有豐富的編碼工具,比如Dom4j析砸、JDom等昔字,JSON也有提供的工具。無工具的情況下首繁,相信熟練的開發(fā)人員一樣能很快的寫出想要的xml文檔和JSON字符串作郭,不過,xml文檔要多很多結(jié)構(gòu)上的字符弦疮。
◆實(shí)例比較
XML和JSON都使用結(jié)構(gòu)化方法來標(biāo)記數(shù)據(jù)夹攒,下面來做一個(gè)簡(jiǎn)單的比較。
用XML表示中國部分省市數(shù)據(jù)如下:
<?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>
</country>
用JSON表示如下:
{
{name:"中國", province:[ { name:"黑龍江", cities:{ city:["哈爾濱","大慶"] },
{name:"廣東", cities:{ city:["廣州","深圳","珠海"] }?
}