從結(jié)構(gòu)上看,所有的數(shù)據(jù)最終都可以分成三種類(lèi)型:
第一種類(lèi)型是scalar(標(biāo)量),也就是一個(gè)單獨(dú)的string(字符串)或數(shù)字(numbers),比如“北京”這個(gè)單獨(dú)的詞。
第二種類(lèi)型是sequence(序列),也就是若干個(gè)相關(guān)的數(shù)據(jù)按照一定順序并列在一起,又叫做array(數(shù)組)或List(列表),比如“北京,東京”。
第三種類(lèi)型是mapping(映射),也就是一個(gè)名/值對(duì)(Name/value),即數(shù)據(jù)有一個(gè)名稱(chēng),還有一個(gè)與之相對(duì)應(yīng)的值,這又稱(chēng)作hash(散列)或dictionary(字典),比如“首都:北京”。
Json的規(guī)格非常簡(jiǎn)單,只用一個(gè)頁(yè)面、幾百個(gè)字就能說(shuō)清楚,而且Douglas Crockford聲稱(chēng)這個(gè)規(guī)格永遠(yuǎn)不必升級(jí),因?yàn)樵撘?guī)定的都規(guī)定了。
1) 并列的數(shù)據(jù)之間用逗號(hào)(“,”)分隔。
2) 映射用冒號(hào)(“:”)表示。
3) 并列數(shù)據(jù)的集合(數(shù)組)用方括號(hào)("[]")表示。
4) 映射的集合(對(duì)象)用大括號(hào)(“{}”)表示。
上面四條規(guī)則,就是Json格式的所有內(nèi)容。
我還記得,在學(xué)習(xí)javascript的時(shí)候,我一度搞不清楚“數(shù)組”(array)和“對(duì)象”(object)的根本區(qū)別在哪里,兩者都可以用來(lái)表示數(shù)據(jù)的集合。
比如有一個(gè)數(shù)組a=[1,2,3,4],還有一個(gè)對(duì)象a={0:1,1:2,2:3,3:4},然后你運(yùn)行alert(a[1]),兩種情況下的運(yùn)行結(jié)果是相同的!這就是說(shuō),數(shù)據(jù)集合既可以用數(shù)組表示,也可以用對(duì)象表示,那么我到底該用哪一種呢?
我后來(lái)才知道,數(shù)組表示有序數(shù)據(jù)的集合,而對(duì)象表示無(wú)序數(shù)據(jù)的集合。如果數(shù)據(jù)的順序很重要,就用數(shù)組,否則就用對(duì)象。
鏈接:
http://www.ruanyifeng.com/blog/2009/05/data_types_and_json.html