理解JSON:3分鐘課程

發表於2011-05-26

如果你跟我一樣(我擔心你就是),那麼,到目前為止,這應該是你對JSON的經驗:

  1. 兩個月前你從沒聽說過JSON
  2. 一個月前你聽說了這個詞但沒有留意
  3. 一週前你發現這個詞被提到多次,開始想,沒錯…又有一些垃圾東西要學了
  4. 今天你被心靈深處的一個鬧鈴鬧醒,心想:這該死的json究竟是個什麼東西?為什麼突然間到處都是它了!

於是晚上我乘坐了一輛慢騰騰的公交回到家(週五通常都是很慢),然後給自己找了一大堆關於JSON資料。所以我可以文雅的帶你進入JSON的大門。

這就開始了…

這幾個字母是什麼意思?

JavaScript Object Notation.

[一個滑稽的名字。它應該被稱作Lightweight Ecmascript Object Notation,或簡稱’LEON’。 ]

它是個什麼東西?

JSON是一種傳遞物件的語法,物件可以是name/value對,陣列和其他物件。

下面是一小段JSON程式碼:

你看懂了吧?那麼當你再看到它時就知道它是JSON了。主要部分:

花括弧,方括弧,冒號和逗號

  1. 花括弧表示一個“容器”
  2. 方括號裝載陣列
  3. 名稱和值用冒號隔開
  4. 陣列元素通過逗號隔開

把它想成“得了厭食症的XML”

(如果你跟我一樣老,可以把它想成有層次關係的’.INI’檔案)
(如果你是個自以為是的Lisp小丑,可以把它想成”S-expressions”,自以為是吧)

JSON很像XML,因為:

  1. 他們都“自我描述”,這意味著值都是可列舉的,是“人類可讀”的
  2. 都是有層級的。(例如你可以在值裡再存放值)
  3. 都能被多種的程式語言解析和使用
  4. 都能使用AJAX方法來傳遞(例如httpWebRequest)

JSON跟XML不一樣,因為:

  1. XML裡在元素的開始和結尾處有尖括號和標籤名:JSON使用花括號,而且只在資料的開始和結束時使用。
  2. JSON更簡練,毫無疑問更適合人類書寫,也許也能讓我們更快速的閱讀。
  3. JSON可以在JavaScript裡簡單的傳遞到eval()方法裡使用
  4. JSON裡有陣列{每個元素沒有自己的名稱}
  5. 在XML裡你可以對一個元素使用任意想要的名稱,在JSON裡你不能使用Javascript裡的保留字

可是為什麼?它有什麼好的?

當你寫ajax之類的東西時,如果你使用JSON,你就勉去了手工拼寫XML。更迅速。

同樣,當你寫ajax之類的東西時,怎樣最簡單?XML方式還是JSON方式:

XML方式:

  1. 取回一個XML檔案
  2. 迴圈它,從中提取值
  3. 處理這些值,等

對比

JSON方式:

  1. 取回JSON字串。
  2. ‘eval’ JSON資料

它是物件導向的嗎?

No,嚴格的說,不是。

就像是VB6裡的物件導向一樣。它提供了很好的封裝機制,你可以使用它把資料和方法分離出來,但它不提供任何的繼承,多型,介面,或其它類似的物件導向的東西

很顯然,它是使javascript變得更易於維護,分析和複用的方向上前進了一步。

Thomas Frank寫了一個靈巧的javascript庫,叫做classyJSON,它在JSON程式碼上增加了繼承和定義範圍等特徵。

它只是用在客戶端嗎?

是,也不是。在伺服器端你可以容易的把物件序列化成JSON或反之。對於.net,程式設計師可以使用類似Json.net的類庫使這些操作自動化(我估計是使用反射機制),或你使用自己的程式來做這些事,可能會更快些。

3分鐘將近結束….

就我所知,JSON是由一個叫做Douglas Crockford的傢伙發明的。如果你喜歡的話,可以看一下他的網站,他非常的有趣。

現在去讀一下懂JSON的人寫的東西

(從Delicious using JSON上搜刮來的!)

這就是全部。

我在幾分鐘的時間裡只能整理出這些東西——所有我說的有些東西可能完全是錯的。如果是這樣,請留言告訴我,告訴我我有多傻。我會很高興的糾正任何一個錯誤。祝你好運!

(編注1:如果你把{和}替換成””,把”:”換成“/”…你會得到一個非常像gaXml的東西。有趣的世界。

(編注2:JasonAjax 都是希臘神話中的英雄。預告:另外一些即將出現的技術垃圾包括:Heracles, Perseus, Deucalion, Theseus
and Bellerophon。)

原文:Secret Geek    譯文:外刊IT評論

相關文章