理解JSON:3分鐘課程
- 兩個(gè)月前你從沒聽說過JSON
- 一個(gè)月前你聽說了這個(gè)詞但沒有留意
- 一周前你發(fā)現(xiàn)這個(gè)詞被提到多次,開始想,沒錯(cuò) … 又有一些垃圾東西要學(xué)了
- 今天你被心靈深處的一個(gè)鬧鈴鬧醒,心想:這該死的json究竟是個(gè)什么東西?為什么突然間到處都是它了!
于是晚上我乘坐了一輛慢騰騰的公交回到家(周五通常都是很慢),然后給自己找了一大堆關(guān)于JSON資料。所以我可以文雅的帶你進(jìn)入JSON的大門。
這就開始了 …
這幾個(gè)字母是什么意思?
JavaScript Object Notation.
[一個(gè)滑稽的名字。它應(yīng)該被稱作Lightweight Ecmascript Object Notation, 或簡稱 'LEON'。 ]
它是個(gè)什么東西?
JSON是一種傳遞對(duì)象的語法,對(duì)象可以是name/value對(duì),數(shù)組和其他對(duì)象。
下面是一小段JSON代碼:
{"skillz": { "web":[ {"name": "html", "years": "5" }, {"name": "css", "years": "3" }], "database":[ {"name": "sql", "years": "7" }] }}
你看懂了吧?那么當(dāng)你再看到它時(shí)就知道它是JSON了。主要部分:
花括弧,方括弧,冒號(hào)和逗號(hào)
- 花括弧表示一個(gè)“容器”
- 方括號(hào)裝載數(shù)組
- 名稱和值用冒號(hào)隔開
- 數(shù)組元素通過逗號(hào)隔開
把它想成“得了厭食癥的XML”
(如果你跟我一樣老,可以把它想成有層次關(guān)系的'.INI'文件)
(如果你是個(gè)自以為是的Lisp小丑,可以把它想成”S-expressions”,自以為是吧)
JSON很像XML,因?yàn)椋?/H3>
- 他們都“自我描述”,這意味著值都是可列舉的,是“人類可讀”的
- 都是有層級(jí)的。(例如你可以在值里再存放值)
- 都能被多種的編程語言解析和使用
- 都能使用AJAX方法來傳遞(例如httpWebRequest)
JSON跟XML不一樣,因?yàn)椋?/H3>
- XML里在元素的開始和結(jié)尾處有尖括號(hào)和標(biāo)簽名:JSON使用花括號(hào),而且只在數(shù)據(jù)的開始和結(jié)束時(shí)使用。
- JSON更簡練,毫無疑問更適合人類書寫,也許也能讓我們更快速的閱讀。
- JSON可以在JavaScript里簡單的傳遞到eval()方法里使用
- JSON里有數(shù)組{每個(gè)元素沒有自己的名稱}
- 在XML里你可以對(duì)一個(gè)元素使用任意想要的名稱,在JSON里你不能使用Javascript里的保留字
可是為什么?它有什么好的?
- XML里在元素的開始和結(jié)尾處有尖括號(hào)和標(biāo)簽名:JSON使用花括號(hào),而且只在數(shù)據(jù)的開始和結(jié)束時(shí)使用。
- JSON更簡練,毫無疑問更適合人類書寫,也許也能讓我們更快速的閱讀。
- JSON可以在JavaScript里簡單的傳遞到eval()方法里使用
- JSON里有數(shù)組{每個(gè)元素沒有自己的名稱}
- 在XML里你可以對(duì)一個(gè)元素使用任意想要的名稱,在JSON里你不能使用Javascript里的保留字
可是為什么?它有什么好的?
當(dāng)你寫ajax之類的東西時(shí),如果你使用JSON,你就勉去了手工拼寫XML。更迅速。
同樣,當(dāng)你寫ajax之類的東西時(shí),怎樣最簡單?XML方式還是JSON方式:
XML方式:
- 取回一個(gè)XML文件
- 循環(huán)它,從中提取值
- 處理這些值,等
對(duì)比
JSON方式:
- 取回JSON字符串。
- ‘eval' JSON數(shù)據(jù)
它是面向?qū)ο蟮膯幔?/H3>
No,嚴(yán)格的說,不是。
就像是VB6里的面向?qū)ο笠粯?。它提供了很好的封裝機(jī)制,你可以使用它把數(shù)據(jù)和方法分離出來,但它不提供任何的繼承,多型,接口,或其它類似的面向?qū)ο蟮臇|西
很顯然,它是使javascript變得更易于維護(hù),分析和復(fù)用的方向上前進(jìn)了一步。
Thomas Frank寫了一個(gè)靈巧的javascript庫,叫做classyJSON,它在JSON代碼上增加了繼承和定義范圍等特征。
它只是用在客戶端嗎?
是,也不是。在服務(wù)器端你可以容易的把對(duì)象序列化成JSON或反之。對(duì)于.net
,程序員可以使用類似Json.net的類庫使這些操作自動(dòng)化(我估計(jì)是使用反射機(jī)制),或你使用自己的程序來做這些事,可能會(huì)更快些。
3分鐘將近結(jié)束….
就我所知,JSON是由一個(gè)叫做Douglas Crockford的家伙發(fā)明的。如果你喜歡的話,可以看一下他的網(wǎng)站,他非常的有趣。
現(xiàn)在去讀一下懂JSON的人寫的東西
(從Delicious using JSON上搜刮來的!)
- DOM Query Speed Test
- 24 ways: Don't 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
這就是全部。
我在幾分鐘的時(shí)間里只能整理出這些東西——所有我說的有些東西可能完全是錯(cuò)的。如果是這樣,請(qǐng)留言告訴我,告訴我我有多傻。我會(huì)很高興的糾正任何一個(gè)錯(cuò)誤。祝你好運(yùn)!
(邊注:如果你把 { 和 } 替換成”<” 和 “/>”,把”:” 換成 “/”… 你會(huì)得到一個(gè)非常像gaXml的東西。有趣的世界。
(邊注2:Jason 和 Ajax 都是希臘神話中的英雄。預(yù)告:另外一些即將出現(xiàn)的技術(shù)垃圾包括:Heracles, Perseus, Deucalion, Theseus
and Bellerophon。)
相關(guān)文章
淺談JSON中stringify 函數(shù)、toJosn函數(shù)和parse函數(shù)
這篇文章主要介紹了淺談JSON中stringify 函數(shù)、toJosn函數(shù)和parse函數(shù),需要的朋友可以參考下2015-01-01把普通對(duì)象轉(zhuǎn)換成json格式的對(duì)象的簡單實(shí)例
下面小編就為大家?guī)硪黄哑胀▽?duì)象轉(zhuǎn)換成json格式的對(duì)象的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-07JSON.parse 數(shù)據(jù)不完整的解決方法
本文主要介紹了JSON.parse 數(shù)據(jù)不完整的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07JSON與XML優(yōu)缺點(diǎn)對(duì)比分析
本文從各個(gè)方面向大家對(duì)比展示了json和xml的優(yōu)缺點(diǎn),十分的全面細(xì)致,有需要的小伙伴可以參考下。2015-07-07