前言
我們需要花點時間討論物件實體,解釋常見錯誤,以及一些大家使用 JSON 會遇到的誤解。
JSON (JavaScript Object Notation)
它是被 JavaScript 的物件實體語法啟發的,因為這樣所以看起來很像物件實體語法 (Object Litetal Syntax),也被稱為 JavaScript Object Notation。
1 | var objectLitetal = { |
這個例子在 JavaScript 是有效的,我們可以得到 objectLitetal 物件的結果,這很容易,因為我們之前講過了。
JSON 格式
1 | { |
在 JavaScript 中現在我們大多用 JSON 格式傳送資料,上述的例子只是個資料字,看起來很像物件實體語法,不過還是有一些小差異,例如:
- 屬性需要被包在引號裡面
這麼寫仍然是個有效的物件實體語法,我們可以做個測試
1 | var objectLitetal = { |
於是我們得知:
- 在物件實體語法中,屬性可以被包在引號內
- 在 JSON 中 屬性「一定」要被包在引號內
技術上來說,JSON 是物件實體語法的子集合,意思就是只要在 JSON 中視有效的,那麼在物件實體語法中就是有效的。但反過來就不一樣了,不是所有的物件實體語法在 JSON 格式中都是有效的。
JavaScript 轉換 JSON
JSON 的規則比較嚴格且 JSON 並不是 JavaScript 的一部分。但是 JSON 很受歡迎,因為它可以很簡單的被 JavaScript 解析。
JavaScript 有一些內建的函式可以轉換這兩者,意思就是可以讓任何物件變成 JSON 字串,也可以讓任何 JSON 字串變成物件。
物件變成 JSON 字串
承接上面的例子,我們可以這麼做:
1 | var objectLitetal = { |
這是 JavaScript 內建的功能「.stringify
」,這會把物件轉換為 JSON 字串。
JSON 字串變成物件
1 | var jsonValue = JSON.parse('{ "firstName": "Willy", "isProgrammer": true }'); |
後記:
本篇會記錄這些只是因為常常搞不清楚物件實體語法和 JSON 字串的差別,這是兩個不同的東西,但 JavaScript 提共了轉換這兩者的功能。