理解JSON:3分鐘課程
如果你跟我一樣(我擔心你就是),那么,到目前為止,這應該是你對JSON的經驗:
- 兩個月前你從沒聽說過JSON
- 一個月前你聽說了這個詞但沒有留意
- 一周前你發現這個詞被提到多次,開始想,沒錯 又有一些垃圾東西要學了
- 今天你被心靈深處的一個鬧鈴鬧醒,心想:這該死的json究竟是個什么東西?為什么突然間到處都是它了!
于是晚上我乘坐了一輛慢騰騰的公交回到家(周五通常都是很慢),然后給自己找了一大堆關于JSON資料。所以我可以文雅的帶你進入JSON的大門。
這就開始了
這幾個字母是什么意思?
JavaScript Object Notation.
[一個滑稽的名字。它應該被稱作Lightweight Ecmascript Object Notation, 或簡稱 'LEON'。 ]
它是個什么東西?
JSON是一種傳遞對象的語法,對象可以是name/value對,數組和其他對象。
下面是一小段JSON代碼:
"web":[
{"name": "html",
"years": "5"
},
{"name": "css",
"years": "3"
}],
"database":[
{"name": "sql",
"years": "7"
}]
}}
你看懂了吧?那么當你再看到它時就知道它是JSON了。主要部分:
花括弧,方括弧,冒號和逗號
- 花括弧表示一個容器
- 方括號裝載數組
- 名稱和值用冒號隔開
- 數組元素通過逗號隔開
把它想成得了厭食癥的XML
(如果你跟我一樣老,可以把它想成有層次關系的.INI文件)
(如果你是個自以為是的Lisp小丑,可以把它想成S-expressions,自以為是吧)
JSON很像XML,因為:
- 他們都自我描述,這意味著值都是可列舉的,是人類可讀的
- 都是有層級的。(例如你可以在值里再存放值)
- 都能被多種的編程語言解析和使用
- 都能使用AJAX方法來傳遞(例如httpWebRequest)
JSON跟XML不一樣,因為:
- XML里在元素的開始和結尾處有尖括號和標簽名:JSON使用花括號,而且只在數據的開始和結束時使用。
- JSON更簡練,毫無疑問更適合人類書寫,也許也能讓我們更快速的閱讀。
- JSON可以在JavaScript里簡單的傳遞到eval()方法里使用
- JSON里有數組{每個元素沒有自己的名稱}
- 在XML里你可以對一個元素使用任意想要的名稱,在JSON里你不能使用Javascript里的保留字
可是為什么?它有什么好的?
當你寫ajax之類的東西時,如果你使用JSON,你就勉去了手工拼寫XML。更迅速。
同樣,當你寫ajax之類的東西時,怎樣最簡單?XML方式還是JSON方式:
XML方式:
- 取回一個XML文件
- 循環它,從中提取值
- 處理這些值,等
對比
JSON方式:
- 取回JSON字符串。
- eval JSON數據
它是面向對象的嗎?
No,嚴格的說,不是。
就像是VB6里的面向對象一樣。它提供了很好的封裝機制,你可以使用它把數據和方法分離出來,但它不提供任何的繼承,多型,接口,或其它類似的面向對象的東西
很顯然,它是使javascript變得更易于維護,分析和復用的方向上前進了一步。
Thomas Frank寫了一個靈巧的javascript庫,叫做classyJSON,它在JSON代碼上增加了繼承和定義范圍等特征。
它只是用在客戶端嗎?
是,也不是。在服務器端你可以容易的把對象序列化成JSON或反之。對于.net
,程序員可以使用類似Json.net的類庫使這些操作自動化(我估計是使用反射機制),或你使用自己的程序來做這些事,可能會更快些。
3分鐘將近結束.
就我所知,JSON是由一個叫做Douglas Crockford的家伙發明的。如果你喜歡的話,可以看一下他的網站,他非常的有趣。
現在去讀一下懂JSON的人寫的東西
(從Delicious using JSON上搜刮來的!)
- DOM Query Speed Test
- 24 ways: Dont be eval()
- Understanding JSON: the 3 minute lesson
- Serializing Objects as JavaScript using Atlas, JSON.NET and AjaxPro
- JSON – Wikipedia, the free encyclopedia
- Introduction to JSON
- XML.com: JSON and the Dynamic Script Tag: Easy, XML-less Web Services for JavaScript
- Classy JSON
- ajax json tutoral
- XML to JSON – a converter
這就是全部。
我在幾分鐘的時間里只能整理出這些東西所有我說的有些東西可能完全是錯的。如果是這樣,請留言告訴我,告訴我我有多傻。我會很高興的糾正任何一個錯誤。祝你好運!
(邊注:如果你把 { 和 } 替換成 和 /,把: 換成 / 你會得到一個非常像gaXml的東西。有趣的世界。
(邊注2:Jason 和 Ajax 都是希臘神話中的英雄。預告:另外一些即將出現的技術垃圾包括:Heracles, Perseus, Deucalion, Theseus and Bellerophon。)