可能有人看到這個標題就嘿嘿一笑,JSON我還不知道麼!
雖然我們經常使用JSON,但是很多人還是容易混淆Javascript Object和JSON
JSON,是一種是一種輕量級的資料交換格式,他的全名是JavaScript Object Notation(JavaScript對象標記法),屬於ES3標準的一個子集。
由於JSON的易用性,現在流行與各個領域出現了各種變體。在我們熟知的AJAX中,X所代表的XML基本已經被JSON代替。由於跨瀏覽器擷取跨域資料JSONP也是非常好的一種解決方案。WEB開發中基本免不了要與JSON打交道。現實中很多人分不清楚什麼是javascript object 什麼是JSON。
1.JSON的格式非常嚴格,JSON與Object相比就想是html對xhtml。
一個標準的JSON資料
{"a":"1"}
JSON資料只能是純文字!鍵和值都必須用(" ")雙引包裹,js的Object 鍵可以不用這樣處理,值如果不是字串可以不這樣處理。
//注意這些都不是JSON
{'a':1}{'a':'1'}{a:1}
2.既然JSON只能儲存純文字,對應js的就是字串。那麼我們要把js對象處理成為JSON的話怎麼辦呢。
其實每個JS的原生類都有(ES6 Function以添加)toString()這樣的方法,能不能用麼。複雜類型如果調用這個方法會返回自身的值
[1,2,3,4].toString(); //"1,2,3,4"
({a:1}).toString(); //"[object Object]"
使用這個會得到一個這樣的結果,如果我們把他們存入cookie或者localStorage,再次取出對象化這顯然不是正確結果。
JSON對象上有兩個靜態方法,parse stringify
parse:負責把JSON資料轉為js對象
stringify:負責吧js對象字串化
3.parse把字串對象化有很多種選擇 eval('('+data+')'), new Function('return '+data)();
鑒於安全性,推薦使用第二種方法
4. stringify把對象字串化,目前還沒有快速的方法,這個過程可以看做是[1,2,3,4] 給數組兩邊加雙引。
5.JSON已被IE8所原生支援,低版本的瀏覽器也有解決方案。
https://github.com/douglascrockford/JSON-js/blob/master/json2.js
JSON之父,做的JSON擴充。JSON只能儲存純文字,局限性還是顯而易見的。JSON的另一個變種BSON (Binary JSON),他支援JSON沒有的一些資料類型,如Date和BinData類型,MongoDB使用他來儲存資料和網路交換資料。
JSON校檢:http://jsonlint.com/
JSON官網:http://json.org/json-zh.html