JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。 它基於JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。 JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成爲理想的數據交換語言。 javascript
JSON建構於兩種結構: html
這些都是常見的數據結構。事實上大部分現代計算機語言都以某種形式支持它們。這使得一種數據格式在一樣基於這些結構的編程語言之間交換成爲可能。 java
JSON具備如下這些形式: 編程
對象是一個無序的「‘名稱/值’對」集合。一個對象以「{」(左括號)開始,「}」(右括號)結束。每一個「名稱」後跟一個「:」(冒號);「‘名稱/值’ 對」之間使用「,」(逗號)分隔。 json
數組是值(value)的有序集合。一個數組以「[」(左中括號)開始,「]」(右中括號)結束。值之間使用「,」(逗號)分隔。 數組
值(value)能夠是雙引號括起來的字符串(string)、數值(number)、true
、false
、 null
、對象(object)或者數組(array)。這些結構能夠嵌套。 數據結構
字符串(string)是由雙引號包圍的任意數量Unicode字符的集合,使用反斜線轉義。一個字符(character)即一個單獨的字符串(character string)。 編程語言
字符串(string)與C或者Java的字符串很是類似。 工具
數值(number)也與C或者Java的數值很是類似。除去不曾使用的八進制與十六進制格式。除去一些編碼細節。 編碼
空白能夠加入到任何符號之間。 如下描述了完整的語言。
{ "firstName": "Brett" }
{ "firstName": "Brett", "lastName":"McLaughlin", "age": 123 }// ,分隔
{
"people"
: [
{
"firstName"
:
"Brett"
,
"lastName"
:
"McLaughlin"
,
"email"
:
"aaaa"
}, //[] 數組
{
"firstName"
:
"Jason"
,
"lastName"
:
"Hunter"
,
"email"
:
"bbbb"
},
{
"firstName"
:
"Elliotte"
,
"lastName"
:
"Harold"
,
"email"
:
"cccc"
}
]}
{
"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"
}
]
}
JSON 值能夠是:
其餘
◆可讀性
JSON和XML的可讀性可謂不相上下,一邊是簡易的語法,一邊是規範的標籤形式,很難分出勝負。
◆可擴展性
XML天生有很好的擴展性,JSON固然也有,沒有什麼是XML能擴展,而JSON卻不能。不過JSON在Javascript主場做戰,能夠存儲Javascript複合對象,有着xml不可比擬的優點。
◆編碼難度
XML有豐富的編碼工具,好比Dom4j、JDom等,JSON也有提供的工具。無工具的狀況下,相信熟練的開發人員同樣能很快的寫出想要的xml文檔和JSON字符串,不過,xml文檔要多不少結構上的字符。
◆解碼難度
XML的解析方式有兩種:
一是經過文檔模型解析,也就是經過父標籤索引出一組標記。例如:xmlData.getElementsByTagName("tagName"),可是這樣是要在預先知道文檔結構的狀況下使用,沒法進行通用的封裝。
另一種方法是遍歷節點(document 以及 childNodes)。這個能夠經過遞歸來實現,不過解析出來的數據仍舊是形式各異,每每也不能知足預先的要求。
凡是這樣可擴展的結構數據解析起來必定都很困難。
JSON也一樣如此。若是預先知道JSON結構的狀況下,使用JSON進行數據傳遞簡直是太美妙了,能夠寫出很實用美觀可讀性強的代碼。若是你是純粹的前臺開發人員,必定會很是喜歡JSON。可是若是你是一個應用開發人員,就不是那麼喜歡了,畢竟xml纔是真正的結構化標記語言,用於進行數據傳遞。
而若是不知道JSON的結構而去解析JSON的話,那簡直是噩夢。費時費力不說,代碼也會變得冗餘拖沓,獲得的結果也不盡人意。可是這樣也不影響衆多前臺開發人員選擇JSON。由於json.js中的toJSONString()就能夠看到JSON的字符串結構。固然不是使用這個字符串,這樣仍舊是噩夢。經常使用JSON的人看到這個字符串以後,就對JSON的結構很明瞭了,就更容易的操做JSON。