本文是深入理解JavaScript系列的第七篇讀文筆記,博客原文在這里。
鑒于JSON數(shù)據(jù)格式的越來越流行,但是JSON對象和JSON字符串這兩種概念往往又會被人混淆。所以本篇文章就是對相關內(nèi)容的闡述。
現(xiàn)在比較流行的網(wǎng)絡數(shù)據(jù)交換格式包括:JSON,YAML以及日薄西山的XML。
從結(jié)構上看,所有的數(shù)據(jù)最后都可以分解成三個基本類型,
此部分內(nèi)容參考自數(shù)據(jù)類型和Json格式。
可見數(shù)據(jù)構成的最小單位是非常簡單的,而JSON正式完美的符合了這三種最基本的數(shù)據(jù)構成單元。
在JavaScript中,我們經(jīng)常會聽到這樣一個詞,JSON字面量,對象字面量,字符串字面量等等,他們究竟是什么意思呢?
引用developer.mozilla.org中的說法,字面量就是
""
)或者單引號(''
)括起來的零個或多個字符。{}
)括起來,擁有零個或多個鍵值對。比如下面的代碼,
// 這些都是字面量
var a = 1;
var name = 'puck';
var puck = {
name: 'puck',
age: 20
};
首先,JSON有非常嚴格的語法,如下,
{
"key": "value"
}
其中,鍵和值都必須要用雙引號括起來,不用或者使用單引號都是不行滴。
從某種意義上說,JSON字符串終歸是字符串,也就是說JSON字符串是字符串的子集,不過JSON字符串滿足這樣的條件: JSON字符串可以被正確的反序列化成JSON對象。
而JSON對象與普通的JavaScript對象卻不是那么好區(qū)分,要看對象所在的上下文場景??聪旅娴拇a,
// JSON字符串
var puck = '{"name": "puck", "age": 20}';
// 字面量對象,這里我們可以簡單將其看成是一個JSON對象
var puck2 = {
"name": "puck2",
"age": 20
};
從嚴格意義上來說,滿足JSON語法的普通JavaScript字面量對象并不是JSON對象。兩者是完全不一樣的概念。
在新版的瀏覽器里JSON對象已經(jīng)被原生的內(nèi)置對象了,目前有2個靜態(tài)方法:JSON.parse
用來將JSON字符串反序列化成對象,JSON.stringify
用來將對象序列化成JSON字符串。老版本的瀏覽器不支持這個對象,但你可以通過json2.js來實現(xiàn)同樣的功能。
好吧,這篇其實算是一篇水文,講述的內(nèi)容比較簡單,算是一篇科普文吧。
這里只想強調(diào)一條,JSON是一種對數(shù)據(jù)結(jié)構的簡潔描述,然后還要知道現(xiàn)代瀏覽器中已經(jīng)有JSON.parse
和JSON.stringify
這兩個方法就可以了。
更多建議: