[JavaScriptWeird]No.24 JSON 與物件實體

前言

我們需要花點時間討論物件實體,解釋常見錯誤,以及一些大家使用 JSON 會遇到的誤解。

JSON (JavaScript Object Notation)

它是被 JavaScript 的物件實體語法啟發的,因為這樣所以看起來很像物件實體語法 (Object Litetal Syntax),也被稱為 JavaScript Object Notation。

1
2
3
4
5
var objectLitetal = {  
firstName: 'Willy',
isProgrammer: true
}
console.log(objectLitetal);

這個例子在 JavaScript 是有效的,我們可以得到 objectLitetal 物件的結果,這很容易,因為我們之前講過了。

JSON 格式

1
2
3
4
{  
"firstName": "Willy",
"isProgrammer": true
}

在 JavaScript 中現在我們大多用 JSON 格式傳送資料,上述的例子只是個資料字,看起來很像物件實體語法,不過還是有一些小差異,例如:

  • 屬性需要被包在引號裡面

這麼寫仍然是個有效的物件實體語法,我們可以做個測試

1
2
3
4
5
var objectLitetal = {  
"firstName": "Willy",
"isProgrammer": true
}
console.log(objectLitetal);

於是我們得知:

  • 在物件實體語法中,屬性可以被包在引號內
  • 在 JSON 中 屬性「一定」要被包在引號內

技術上來說,JSON 是物件實體語法的子集合,意思就是只要在 JSON 中視有效的,那麼在物件實體語法中就是有效的。但反過來就不一樣了,不是所有的物件實體語法在 JSON 格式中都是有效的。

JavaScript 轉換 JSON

JSON 的規則比較嚴格且 JSON 並不是 JavaScript 的一部分。但是 JSON 很受歡迎,因為它可以很簡單的被 JavaScript 解析。

JavaScript 有一些內建的函式可以轉換這兩者,意思就是可以讓任何物件變成 JSON 字串,也可以讓任何 JSON 字串變成物件。

物件變成 JSON 字串

承接上面的例子,我們可以這麼做:

1
2
3
4
5
var objectLitetal = {  
"firstName": "Willy",
"isProgrammer": true
}
console.log(JSON.stringify(objectLitetal));

這是 JavaScript 內建的功能「.stringify」,這會把物件轉換為 JSON 字串。

JSON 字串變成物件

1
2
var jsonValue = JSON.parse('{ "firstName": "Willy", "isProgrammer": true }');  
console.log(jsonValue);

後記:

本篇會記錄這些只是因為常常搞不清楚物件實體語法和 JSON 字串的差別,這是兩個不同的東西,但 JavaScript 提共了轉換這兩者的功能。

0%